La pregunta no es "cuándo debería ser PK", sino que debería preguntarse "¿cuál es la clave adecuada para el índice agrupado"?
Y la respuesta realmente depende de cómo se consultan los datos . El índice agrupado tiene una ventaja sobre todos los demás índices: dado que siempre incluye todas las columnas, siempre está cubriendo. Por lo tanto, las consultas que pueden aprovechar el índice agrupado ciertamente no necesitan usar búsquedas para satisfacer algunas de las columnas y / o predicados proyectados.
Otra pieza del rompecabezas es cómo se puede usar un índice . Hay tres patrones típicos:
- sondeos, cuando se busca un único valor clave en el índice
- escaneos de rango, cuando se recupera un rango de valores clave
- ordenar por requisitos, cuando un índice puede satisfacer un pedido sin requerir un orden de parar y continuar
Entonces, si analiza su carga esperada (las consultas) y descubre que una gran cantidad de consultas usaría un índice particular porque usan un cierto patrón de acceso que se beneficia de un índice, tiene sentido proponer ese índice como el índice agrupado.
Otro factor más es que la clave de índice agrupada es la clave de búsqueda utilizada por todos los índices no agrupados y, por lo tanto, una clave de índice agrupada amplia crea un efecto dominó y amplía todos los índices no agrupados y los índices amplios significan más páginas, más E / S , más memoria, menos bondad.
Un buen índice agrupado es estable , no cambia durante la vida útil de la entidad, porque un cambio en los valores clave del índice agrupado significa que la fila debe eliminarse e insertarse nuevamente.
Y un buen índice agrupado crece en orden no al azar (cada valor de clave recién insertado es mayor que el valor anterior) para evitar divisiones de página y fragmentación (sin perder el tiempo con FILLFACTOR
s).
Entonces, ahora que sabemos qué es una buena clave de índice agrupada, ¿la clave primaria (que es una propiedad lógica de modelado de datos) cumple con los requisitos? En caso afirmativo, entonces el PK debe agruparse. Si no, entonces la PK no debe estar agrupada.
Para dar un ejemplo, considere una tabla de hechos de ventas. Cada entrada tiene una ID que es la clave principal. Pero la gran mayoría de las consultas solicitan datos entre una fecha y otra fecha, por lo tanto, la mejor clave de índice agrupada sería la fecha de venta , no la ID . Otro ejemplo de tener un índice agrupado diferente de la clave primaria es una clave de selectividad muy baja, como una 'categoría' o un 'estado', una clave con muy pocos valores distintos. Tener una clave de índice agrupada con esta clave de baja selectividad como la tecla más a la izquierda, por ejemplo (state, id)
, a menudo tiene sentido debido a los escaneos de rangos que buscan todas las entradas en un "estado" particular.
Una última nota sobre la posibilidad de una clave primaria no agrupada sobre un montón (es decir, no hay ningún índice agrupado). Este puede ser un escenario válido, la razón típica es cuando el rendimiento de inserción masiva es crítico, ya que los montones tienen un rendimiento de inserción masiva significativamente mejor en comparación con los índices agrupados.