sql-server - restriccion - unique sql para que sirve
Restricción única vs índice único (4)
Estoy interesado en saber qué técnica los desarrolladores prefieren usar para reforzar la exclusividad en SQL Server: RESTRICCIÓN ÚNICA o ÍNDICE ÚNICO. Dado que hay poca diferencia en la implementación física de cada uno, ¿cómo se decide cuál es el mejor?
¿Hay otras razones además del rendimiento para evaluar la mejor solución?
¿Hay ventajas de administración de bases de datos para uno u otro?
Este artículo de MSDN que compara los dos es para SQL Server 2000: http://msdn.microsoft.com/en-us/library/aa224827(SQL.80).aspx
Para la mayoría de los propósitos, no hay diferencia: la restricción se implementa como un índice debajo de las coberturas. Y aunque existe la posibilidad de desactivar la restricción, en realidad no funciona en SQL Server.
Solo importa si desea ajustar cosas como FILLFACTOR, etc. de qué manera desea implementar la restricción única.
SQL Server 2008+ agregó INCLUDE
para proporcionar índices de cobertura más eficientes. Índices filtrados = restricción única sobre un subconjunto de filas / ignorar múltiples nulos, etc.
Mis dos centavos: usaría una restricción cuando quisiera describir la lógica comercial y un índice cuando quiera mejorar el rendimiento. El hecho de que puedan implementarse de la misma manera en un SGBD no significa que la distinción entre los motivos para definir estos objetos no sea significativa.
No son significativamente diferentes. Cuando crea una restricción única, SQL Server crea automáticamente un índice único para usted.
Con la sintaxis para crear un índice, es posible que tenga un mejor control al definir un índice único para especificar las columnas incluidas, no agrupadas, el grupo de archivos, el filtrado de índices (SqlSvr2008), etc.
Una restricción es preferible en la mayoría de los casos porque expresa la intención de la unicidad: es una restricción. Un índice no transmite esta intención.
En cuanto a la capacidad de administración, el impacto es mínimo. Puede administrar el índice (reconstruir, reorganizar) como si se hubiera creado independientemente de la restricción. La única diferencia es que la restricción depende del índice, por lo que para soltar el índice, también debe soltar la restricción.
Una restricción única implica exclusividad y la eliminación de la restricción eliminará el índice creado por el motor. Un índice puede ser alterado para eliminar su singularidad y usted todavía tiene su índice. Creo que se puede suponer que la mayoría de las columnas obligarían a la singularidad también serviría como un índice por razones de rendimiento; ergo, utilizo principalmente índices únicos. Utilizo restricciones únicas solo en las columnas que deben ser únicas pero sirven deficientemente para el rendimiento (es decir, un varchar (200) que debe ser único); en tal caso, quiero señalar claramente que es una idea única pero probablemente no tan buena para buscar a pesar del índice subyacente.