indexes - ¿Cuál es la diferencia entre crear un índice UNIQUE como "índice" o como "restricción" en SQL Server?
sql server indexes (4)
No existe una diferencia práctica entre una restricción única y un índice único que no sea el hecho de que la restricción única también se enumera como un objeto de restricción en la base de datos.
Al crear un índice sobre una columna que será UNICO (pero no la clave principal de la tabla), el servidor SQL nos permite elegir algunas opciones:
1) Puedo elegir que sea una Restricción o un Índice.
Supongo que esto significa que si lo configuro como una restricción, no lo usará cuando consulte, solo cuando escriba. Sin embargo, la única forma eficiente en que se me ocurre que SQL Server haga cumplir esa restricción es creando realmente un índice. ¿Cuál es el uso para esta opción?
2) Además, si lo configuro como "índice", me permite especificar que debe ignorar las claves duplicadas. Esto es lo más desconcertante para mí ...
Supongo que significa lo opuesto a la restricción. Probablemente signifique "usarlo al consultar, pero ni siquiera verificar cuando se escribe".
Pero entonces ¿por qué debería establecerlo como ÚNICO?
Supongo que hay algunas optimizaciones que SQL Server puede hacer, pero me gustaría entenderlo mejor.
¿Alguien sabe exactamente qué hace SQL Server con estas opciones?
¿Cuál es el caso de uso para establecer un índice único, pero ignorar las claves duplicadas?
NOTA: Esto es para SQL Server 2000
EDITAR: de acuerdo con lo que dices, sin embargo ... Si creo una Restricción, ¿se usará para acelerar las consultas que se filtren usando los campos en la restricción?
¡Gracias!
SQL Server creará un índice para implementar restricciones ÚNICAS. Puede ver una referencia al índice exclusivo que se utiliza para imponer restricciones únicas en la vista sys.key_constraints (en 2005, lo siento, no conozco el equivalente de 2000). Pero ambas versiones usarán el índice al realizar consultas.
La diferencia es que si creas un índice tienes más control sobre cómo está construido. En particular, puede incluir columnas adicionales que pueden buscarse frecuentemente junto con la clave.
Ambas opciones le permitirán "ignorar claves duplicadas" en datos existentes , pero ambas generarán un error si intenta insertar un nuevo valor que duplica uno existente.
Según MSDN, no hay diferencias significativas entre la creación de un índice único a través de una restricción única o la creación explícita utilizando la instrucción CREATE UNIQUE INDEX. En ambos casos, los datos se validan por singularidad de la misma manera, y también el optimizador de consultas no los trata de forma diferente. Como buena práctica, utilice una restricción única si la integridad de los datos es el objetivo, otra instrucción de uso CREATE UNIQUE INDEX directamente.
Aquí hay un excelente artículo y un video que explican la diferencia entre ambos enfoques.
Una restricción UNIQUE
es parte del estándar ISO / ANSI SQL, mientras que los índices no se deben a que el Estándar sea independiente de la implementación. SQL Server, en común con la mayoría de los DBMS de SQL, usará un índice para implementar una restricción UNIQUE
.
Podría decirse que usar UNIQUE
lugar de indexar en una secuencia de comandos SQL es un poco más portátil, pero como siempre la sintaxis patentada no debe descartarse si brinda oportunidades para la optimización, etc.