Этот вопрос возникает после прочтения комментария в этом вопросе:
Когда вы создаете таблицу "много-ко-многим", вы должны создать составной первичный ключ в двух столбцах внешнего ключа или создать первичный ключ суррогатного "идентификатора" с автоматическим увеличением и просто поместить индексы в свои два столбца 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. Для многих записей, это становится очень проблематичным поскольку это включает перетасовку сотен, тысячи или миллионы записей каждый раз добавляется. Напротив, автоинкрементный ПК позволяет записи, которые должны быть прикреплены до конца.
Причина, по которой я спрашиваю, заключается в том, что я всегда был склонен делать составной первичный ключ без суррогатного столбца автоинкремента, но я не уверен, что суррогатный ключ на самом деле более эффективен.