2008-12-14 29 views
50

Tengo una columna en una tabla (por ejemplo, Nombre de usuario) que quiero asegurar que sea única. Así que creo una clave única para esa columna y la llamo IX_Users_UserName.¿La clave única del servidor Sql también es un índice?

Ahora, si realizo muchas búsquedas de usuarios según su nombre de usuario, quiero asegurarme de que haya un índice para ese campo.

¿Necesito crear un índice separado, o la clave única también se considera un índice, al igual que la clave principal es una clave única agrupada?

+2

Siento la necesidad de señalar que una clave principal no es automáticamente una clave única agrupada. No es necesario que su índice agrupado esté en la clave principal. –

+0

También vea http://stackoverflow.com/questions/564895/what-is-the-difference-between-unique-key-and-index-with-isunique-yes –

Respuesta

37

clave única: Unique Key hace cumplir singularidad de la columna en la que se se definen. La clave única crea un índice no agrupado en la columna. clave única permite solo un valor nulo.

ALTER TABLE para añadir restricción única a la columna:

Autores ALTER TABLE ADD CONSTRAINT IX_Authors_Name único (Nombre) IR

Source

Más información de MSDN.

FWIW - si su restricción no crea un índice, evitaría nombrarlo IX_, ya que normalmente se supondría que estaba asociado a uno (IX = índice).

+0

Cheers :) respuesta perfecta.También voy a reanimar todas mis claves únicas a IX y soltar el único índice que tenía en esos campos (¿por qué doblar ... eso es malo?). ¡Aclamaciones! –

+0

Me gusta prefijar distintivamente mis índices únicos de índices no únicos: UI o UIX. El Reino Unido también es aceptable, pero dice que este es un índice. –

1

Una clave única es un índice que sospecho que casi todos los productos de bases de datos. Tiene que ser así, de lo contrario la base de datos tendría dificultades para aplicarla: cuando insertas un valor, la base de datos tiene que responder "¿ese valor ya existe?" La manera correcta de hacerlo es consultar un índice.

No tengo un servidor SQL en frente de mí para probar, pero me sorprendería si no lo hiciera.

20

Básicamente, en SQL Server, una restricción única se realiza de hecho por medio de un índice único.

Las diferencias entre una restricción ÚNICA y UN ÍNDICE ÚNICO son bastante sutiles, realmente. Si crea un ÍNDICE ÚNICO, puede hacer referencia a eso en una restricción de clave externa desde otra tabla (no funciona si crea una restricción ÚNICA ...).

¿Cuál es la diferencia? Bueno, una restricción única realmente es más lógica en una tabla: desea expresar la intención de que el contenido de una columna determinada (o grupo de columnas) sea único.

Un índice único (como la mayoría de los índices) es más un detalle de implementación "entre bastidores".

Desde mi punto de vista, a menos que realmente tenga un problema, siempre usaría un ÍNDICE ÚNICO: el beneficio de ser parte de una restricción de integridad referencial es bastante válido y puede ser muy útil en ciertos casos. Funcionalmente, en la práctica, no hay diferencia entre usar un Restricto Único vs. Índice Único, realmente.

Cuestiones relacionadas