Це запитання виникає після прочитання коментаря до цього питання:
Створюючи таблицю "багато на багато", чи слід створити складений первинний ключ на двох стовпцях із зовнішнім ключем або створити первинний ключ автоматичного збільшення сурогатного "ідентифікатора" та просто поставити індекси на дві колонки FK (а може бути унікальне обмеження)? Які наслідки для продуктивності для вставлення нових записів / повторної індексації у кожному випадку?
В основному це:
PartDevice
----------
PartID (PK/FK)
DeviceID (PK/FK)
порівняно з цим:
PartDevice
----------
ID (PK/auto-increment)
PartID (FK)
DeviceID (FK)
Коментолог каже:
виготовлення двох ідентифікаторів PK означає, що таблиця фізично сортується на диску в такому порядку. Отже, якщо ми вставимо (Part1 / Device1), (Part1 / Device2), (Part2 / Device3), то (Частина 1 / Device3) база даних повинна буде розбити таблицю на частини та вставити останню між записами 2 та 3. Для багато записів, це стає дуже проблематичним, оскільки воно включає переташування сотень, тисяч чи мільйонів записів кожного разу, коли додається один. На відміну від цього, автоматичне збільшення ПК дозволяє нові записи записувати до кінця.
Причина, про яку я питаю, полягає в тому, що я завжди був схильний робити складений первинний ключ без сурогатного стовпчика автоматичного збільшення, але я не впевнений, чи дійсно ключ сурогатних справді більш ефективний.