5

Puede crear un índice agrupado en una columna que no sea la columna de clave principal si se especificó una restricción de clave primaria no agrupada. http://msdn.microsoft.com/en-us/library/ms186342.aspx¿la clave principal siempre está indexada en el servidor sql?

Así lo anterior me dijo: puedo crear un índice agrupado en columnas distintas de clave primaria.

Creo que también transmite que una clave principal debe ser una clave primaria no agrupada o una clave agrupada. ¿Es posible que una clave principal no esté indexada?

Lo que es más:

Al crear una restricción UNIQUE, se crea un índice agrupado único para hacer cumplir una restricción UNIQUE por defecto. Puede especificar un índice agrupado único si todavía no existe un índice agrupado en la tabla.

¿Esto significa que una restricción única tiene que crear un índice agrupado o un índice no agrupado?

Respuesta

12

¿Es posible que una clave principal no esté indexada?

No, no lo es.

Se necesita algún tipo de índice para vigilar el PRIMARY KEY, de lo contrario, sería necesario examinar toda la tabla en cada inserción (para garantizar la exclusividad).

Desde el docs:

El motor de base de datos crea automáticamente un índice único para hacer cumplir el requisito de la singularidad de la restricción PRIMARY KEY. Si un índice agrupado aún no existe en la tabla o no se especifica explícitamente un índice no agrupado, se crea un único índice agrupado para aplicar la restricción PRIMARY KEY.


¿Esto significa una restricción única tiene que crear un índice agrupado o un índice no agrupado?

Sí, por las mismas razones.


PRIMARY KEY y UNIQUE son conceptos lógicos, mientras que el índice solo tiene un efecto secundario de implementar de manera eficiente. Así que, estrictamente hablando, ALTER TABLE ADD CONSTRAINT UNIQUE y CREATE UNIQUE INDEX significan cosas diferentes.

Si, en el futuro, una cabeza brillante inventa una forma de utilizar el principio de Pauli o el enredo cuántico o lo que sea para forzar la singularidad en el nivel físico, SQL Server 2155 puede emplearla para imponer la restricción, pero aún tendrá que crear la B -Tree para el índice.

+1

Creo que la respuesta puede ser engañosa en función del título de la pregunta. La respuesta es SÍ, un pk siempre está indexado. – JonH

+0

Mucho mejor, gracias. – JonH

1

Respuesta corta: No,

Cada tabla en SQL Server debe tener sólo un índice agrupado. Otros índices (no agrupados) usan del índice agrupado.La clave principal es el índice agrupado comúnmente. Pero la clave primaria siempre se indexa a diferencia de la clave externa.

http://www.sqlfiddle.com/#!6/972f0/1 
+0

* cada tabla ... debe tener solo un índice agrupado * - cada tabla puede ** ¡NUNCA ** nunca ha tenido más de un índice agrupado! No es una restricción * should not *: es una restricción fija ** CAN NOT **. No hay forma de tener más de un índice agrupado. –

Cuestiones relacionadas