Además de los puntos en otras respuestas, aquí hay algunas diferencias clave entre los dos.
Nota: Los mensajes de error son de SQL Server 2012.
Errores
La violación de una restricción única devuelve el error 2627.
Msg 2627, Level 14, State 1, Line 1
Violation of UNIQUE KEY constraint 'P1U_pk'. Cannot insert duplicate key in object 'dbo.P1U'. The duplicate key value is (1).
The statement has been terminated.
La violación de un índice único devuelve el error 2601.
Msg 2601, Level 14, State 1, Line 1
Cannot insert duplicate key row in object 'dbo.P1' with unique index 'P1_u'. The duplicate key value is (1).
The statement has been terminated.
Deshabilitar
Una restricción única no se puede deshabilitar.
Msg 11415, Level 16, State 1, Line 1
Object 'P1U_pk' cannot be disabled or enabled. This action applies only to foreign key and check constraints.
Msg 4916, Level 16, State 0, Line 1
Could not enable or disable the constraint. See previous errors.
Pero el índice único detrás de una restricción de clave principal o una restricción única se puede deshabilitar, al igual que cualquier índice único. Hat-tip Brain2000.
ALTER INDEX P1_u ON dbo.P1 DISABLE ;
Tenga en cuenta la advertencia habitual de que deshabilitar un índice agrupado hace que los datos sean inaccesibles.
Opciones
Las restricciones únicas admiten opciones de indexación como FILLFACTOR
y IGNORE_DUP_KEY
, aunque este no ha sido el caso para todas las versiones de SQL Server.
Columnas Incluidas
Los índices no agrupados pueden incluir columnas no indexadas (denominadas índice de cobertura, esta es una mejora importante del rendimiento). Los índices detrás de las restricciones PRIMARY KEY y UNIQUE no pueden incluir columnas. Punta de sombrero @ypercube.
Filtración
Una restricción Unique no se puede filtrar.
Se puede filtrar un índice único.
CREATE UNIQUE NONCLUSTERED INDEX Students6_DrivesLicence_u
ON dbo.Students6( DriversLicenceNo ) WHERE DriversLicenceNo is not null ;
Restricciones de clave extranjera
Una restricción de clave externa no puede hacer referencia a un índice único filtrado, aunque puede hacer referencia a un índice único no filtrado (creo que esto se agregó en SQL Server 2005).
Nombrar
Al crear una restricción, especificar un nombre de restricción es opcional (para los cinco tipos de restricciones). Si no especifica un nombre, MSSQL generará uno para usted.
CREATE TABLE dbo.T1 (
TID int not null PRIMARY KEY
) ;
GO
CREATE TABLE dbo.T2 (
TID int not null CONSTRAINT T2_pk PRIMARY KEY
) ;
Al crear índices, debe especificar un nombre.
Punta de sombrero @ i-one.
Enlaces
http://technet.microsoft.com/en-us/library/aa224827(v=SQL.80).aspx
http://technet.microsoft.com/en-us/library/ms177456.aspx