Esta pregunta surge después de leer un comentario en esta pregunta:SQL - muchos-a-muchos tabla principal clave
Cuando se crea una tabla de muchos a muchos, en caso de que crear una composición clave principal en las dos columnas de clave externa, o crear una clave primaria sustituta de "ID" de aumento automático, y simplemente poner í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/volver a indexar en cada caso?
Básicamente, esto:
PartDevice
----------
PartID (PK/FK)
DeviceID (PK/FK)
frente a esto:
PartDevice
----------
ID (PK/auto-increment)
PartID (FK)
DeviceID (FK)
El comentarista dice:
hacer las dos ID de la PK significa la mesa está ordenada físicamente en el disco en ese orden. Si insertamos (Part1/Device1), (Part1/Device2), (Part2/Device3), 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, un PK autoincrementing permite agregar los nuevos registros al final.
La razón por la que pido es porque siempre he sentido inclinado a hacer la clave principal compuesta con ninguna columna de incremento automático de alquiler, pero no estoy seguro de si la clave sustituta es en realidad con más prestaciones.
gran pregunta, esperando algunas respuestas de sql guru :) – sbczk
Aquí hay una pregunta silimar publicada en SO: http://stackoverflow.com/questions/344068/sql-server-clustered-index-order-of-index- pregunta – Tony
(intenté agregar esto a mi comentario anterior pero no puedo) Dependiendo de la cantidad de insertos, también puede reconstruir periódicamente su índice para asegurarse de que devuelve resultados rápidamente. En SQL Server también puede modificar el FILLFACTOR del índice para proporcionar suficiente espacio para las inserciones antes de que tenga que mover los datos. – Tony