¿Hay alguna diferencia tangible entre un índice agrupado único y una clave primaria agrupada?


17

Entiendo que puede haber una diferencia de significado o intención entre los dos, pero ¿hay alguna diferencia de comportamiento o rendimiento entre una clave primaria agrupada y un índice único agrupado?

Respuestas:


15

Una diferencia principal es que el índice único puede tener un valor NULL que no está permitido en la clave primaria. Agrupados o no, esta es la principal diferencia entre la implementación práctica de una Clave primaria frente a una Clave única.

Ah, y el hecho de que una tabla puede tener un PK y muchos UK :-).

Ambas son diferencias en INTENTO, no en RENDIMIENTO. De lo contrario, no creo que haya ninguna diferencia. Detrás de cualquier PK o UK, el SQL Server crea un índice (dependiendo de la solicitud, agrupado o no) y la forma en que se usa es transparente para la fuente de origen.


Entonces, ¿no hay razón para usar un PK, excepto (A) como un alias para NOT NULL UNIQUE CLUSTEREDo (B) para resaltar que un UQ particular es "especial" en un sentido de metadatos, a pesar de que el RDMS es agnóstico?
Jon of All Trades

Sí, algo así, iría por la opción B yo mismo :-).
Marian

Hay una razón: ¡dejar de usar el valor especial NULL donde no es apropiado!
JamesRyan

@JamesRyan: Eso está cubierto por la razón #A de Jon of All Trades.
Andriy M

1
@JamesRyan: Sí, entre PRIMARY KEYy NOT NULL UNIQUE, el primero sería mucho más difícil de convertir NULL UNIQUE(particularmente si la restricción ya estaba referenciada por una clave externa). Ciertamente evitaría cambios accidentales de NOT NULLa NULL.
Andriy M

8

Entre una clave primaria en clúster y un índice en clúster único, no hay otra diferencia que el índice en clúster único puede tener un valor NULL.

Un índice agrupado no único tiene un unificador que debe tratarse para valores no únicos.


¿Quiere decir que otros índices en esa tabla apuntan directamente a las filas en el índice agrupado, ignorando el índice creado por la clave primaria?
bernd_k

1
Eso es correcto. Los índices no agrupados apuntarán a la clave de agrupación, no a la clave primaria. Si la clave primaria es una clave no agrupada, lo único que hace es imponer la unicidad en una columna que no admite valores NULL para que pueda usarse a través de una clave externa.
mrdenny
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.