2009-02-19 13 views
49

Tengo una tabla con una clave principal, pero quiero que se restrinjan otras dos columnas, por lo que se garantiza que la combinación de ambas siempre será única.¿Cuál es la diferencia entre Unique Key e Index with IsUnique = Yes?

(un ejemplo tonto:. En una mesa LIBROS, la columna de IBAN es la clave principal, pero la combinación del título y columnas autor también siempre debe ser único)

En el SQL Server Management Studio es posible crear un nuevo índice y establecer IsUnique en Sí, o puedo crear una nueva clave única.

¿Cuál es la diferencia entre los dos enfoques, y cuál se adapta mejor para qué fines?

+5

Solo en caso relevante: si necesita permitir que varias filas sean NULL, pero las filas que no sean NULL deben ser ÚNICAS: aplique eso con un Trigger, o una VISTA con UNIQUE INDEX - CREATE VIEW xxx AS SELECT Title, Autor FROM Libros DONDE (Título + Autor) NO ES NULO luego crea un índice en esa Vista – Kristen

+0

Gracias Kirsten, ¡esa fue información útil! – JacobE

+1

También vea http://stackoverflow.com/questions/366186/is-the-sql-server-unique-key-also-an-index –

Respuesta

35

Crear una restricción ÚNICA es una declaración más clara de la regla. El atributo IsUnique del índice es un detalle de implementación: cómo se implementa la regla, no cuál es la regla. El efecto es el mismo sin embargo.

+0

¿qué pasa con el rendimiento? – pylover

+1

@pylover: en algunos casos, una restricción (por ejemplo, una clave externa o no nula) puede mejorar el rendimiento al darle al optimizador información útil que de otro modo no tendría. En el caso de la singularidad, me imagino que no hay diferencia entre una restricción y solo un índice, pero no está 100% seguro. –

0

índices únicos son claves únicas.

6

Sólo para que sepas, cuando se crea una única restricción de SQL Server creará un índice detrás de las escenas

7

Hay una clara diferencia entre el 2. Una restricción únicos define qué combinación de columnas tiene que ser único. Un índice único es solo una forma de asegurarse de que lo anterior siempre sea válido. Pero es posible tener un índice no exclusivo que soporte una restricción única. (si la restricción es deferable = Solo tiene que ser válida en el momento de la confirmación, pero se puede interrumpir en el medio de una transacción)

4

Una cosa que descubrí por las malas es que en el script SSMS de claves únicas se configuró como verdadero de forma predeterminada, pero la secuencia de comandos de los índices se estableció en False. Cuando utilicé el menú de contexto de la tabla de scripts como SSMS, no obtuve mis índices únicos.

Además, si el tipo está configurado en clave única, no puede cambiar la configuración "Ignorar clave duplicada". Primero debe cambiar el tipo de clave única a índice, luego puede configurar Ignorar claves duplicadas en verdadero.

Cuestiones relacionadas