Esta pergunta surge depois de ler um comentário nesta pergunta:
Ao criar uma tabela muitos-para-muitos, você deve criar uma chave primária composta nas duas colunas de chave estrangeira ou criar uma chave primária "ID" substituta automática de incremento automático e apenas colocar índices nas duas colunas FK (e talvez uma restrição única)? Quais são as implicações no desempenho para inserir novos registros / reindexação em cada caso?
Basicamente, isso:
PartDevice
----------
PartID (PK/FK)
DeviceID (PK/FK)
vs. isto:
PartDevice
----------
ID (PK/auto-increment)
PartID (FK)
DeviceID (FK)
O comentarista diz:
tornar os dois IDs o PK significa que a tabela está classificada fisicamente no disco nessa ordem. Portanto, se inserirmos (Parte1 / Dispositivo1), (Parte1 / Dispositivo2), (Parte2 / Dispositivo3), (Parte 1 / Dispositivo3), o banco de dados terá que dividir a tabela e inserir a última entre as entradas 2 e 3. Para Em muitos registros, isso se torna muito problemático, pois envolve o embaralhamento de centenas, milhares ou milhões de registros toda vez que um é adicionado. Por outro lado, uma PK com incremento automático permite que os novos registros sejam alinhados até o final.
A razão pela qual estou perguntando é porque sempre fui inclinado a executar a chave primária composta sem a coluna de auto incremento substituto, mas não tenho certeza se a chave substituta é realmente mais eficiente.