Esta pregunta surge después de leer un comentario en esta pregunta:
Cuando crea una tabla de muchos a muchos, debe crear una clave primaria compuesta en las dos columnas de clave externa, o crear una clave primaria "ID" sustituta de incremento automático, y simplemente colocar índices en sus dos columnas FK (y tal vez una restricción única)? ¿Cuáles son las implicaciones en el rendimiento para insertar nuevos registros / reindexar en cada caso?
Básicamente, esto:
PartDevice
----------
PartID (PK/FK)
DeviceID (PK/FK)
vs. esto:
PartDevice
----------
ID (PK/auto-increment)
PartID (FK)
DeviceID (FK)
El comentarista dice:
hacer que las dos ID sean PK significa que la tabla está físicamente ordenada en el disco en ese orden. Entonces, si insertamos (Parte1 / Dispositivo1), (Parte1 / Dispositivo2), (Parte2 / Dispositivo3), entonces (Parte 1 / Dispositivo3) la base de datos tendrá que separar la tabla e insertar la última entre las entradas 2 y 3. Para muchos registros, esto se vuelve muy problemático ya que implica mezclar cientos, miles o millones de registros cada vez que se agrega uno. Por el contrario, una PK de autoincremento permite que los nuevos registros se agreguen hasta el final.
La razón por la que pregunto es porque siempre me he inclinado a hacer la clave primaria compuesta sin una columna de incremento automático sustituto, pero no estoy seguro de si la clave sustituta es realmente más eficaz.