Этот вопрос возникает после прочтения комментария к этому вопросу:
Когда вы создаете таблицу «многие ко многим», следует ли вам создать составной первичный ключ для двух столбцов внешнего ключа или создать суррогатный первичный ключ «ID» с автоинкрементом и просто поместить индексы в два столбца FK (и, возможно, уникальное ограничение)? Каково влияние на производительность вставки новых записей / повторной индексации в каждом случае?
В основном это:
PartDevice
----------
PartID (PK/FK)
DeviceID (PK/FK)
против этого:
PartDevice
----------
ID (PK/auto-increment)
PartID (FK)
DeviceID (FK)
Комментатор говорит:
превращение двух идентификаторов в PK означает, что таблица физически сортируется на диске в указанном порядке. Итак, если мы вставим (Part1 / Device1), (Part1 / Device2), (Part2 / Device3), тогда (Part 1 / Device3) базе данных придется разбить таблицу на части и вставить последнюю между записями 2 и 3. Для При большом количестве записей это становится очень проблематичным, поскольку требует перетасовки сотен, тысяч или миллионов записей при каждом добавлении одной. Напротив, автоинкрементный PK позволяет прикреплять новые записи до конца.
Причина, по которой я спрашиваю, заключается в том, что я всегда был склонен использовать составной первичный ключ без суррогатного столбца с автоинкрементом, но я не уверен, действительно ли суррогатный ключ более эффективен.