Além dos pontos em outras respostas, aqui estão algumas diferenças importantes entre os dois.
Nota: As mensagens de erro são do SQL Server 2012.
Erros
A violação de uma restrição exclusiva retorna o erro 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.
A violação de um índice exclusivo retorna o erro 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.
Desativando
Uma restrição exclusiva não pode ser desativada.
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.
Mas o índice exclusivo por trás de uma restrição de chave primária ou de uma restrição exclusiva pode ser desativado, assim como qualquer índice exclusivo. Brain2000 com ponta de chapéu.
ALTER INDEX P1_u ON dbo.P1 DISABLE ;
Observe o aviso usual de que desabilitar um índice clusterizado torna os dados inacessíveis.
Opções
Restrições exclusivas oferecem suporte a opções de indexação como FILLFACTOR
e IGNORE_DUP_KEY
, embora esse não tenha sido o caso para todas as versões do SQL Server.
Colunas incluídas
Os índices não clusterizados podem incluir colunas não indexadas (denominado índice de cobertura, este é um grande aprimoramento de desempenho). Os índices por trás das restrições PRIMARY KEY e UNIQUE não podem incluir colunas. @Ypercube.
Filtragem
Uma restrição exclusiva não pode ser filtrada.
Um índice exclusivo pode ser filtrado.
CREATE UNIQUE NONCLUSTERED INDEX Students6_DrivesLicence_u
ON dbo.Students6( DriversLicenceNo ) WHERE DriversLicenceNo is not null ;
Restrições de chave estrangeira
Uma restrição de chave estrangeira não pode fazer referência a um índice exclusivo filtrado, embora possa fazer referência a um índice exclusivo não filtrado (acho que foi adicionado no SQL Server 2005).
Nomeação
Ao criar uma restrição, a especificação de um nome de restrição é opcional (para todos os cinco tipos de restrições). Se você não especificar um nome, o MSSQL gerará um para você.
CREATE TABLE dbo.T1 (
TID int not null PRIMARY KEY
) ;
GO
CREATE TABLE dbo.T2 (
TID int not null CONSTRAINT T2_pk PRIMARY KEY
) ;
Ao criar índices, você deve especificar um nome.
Gorro @ i-one.
Ligações
http://technet.microsoft.com/en-us/library/aa224827(v=SQL.80).aspx
http://technet.microsoft.com/en-us/library/ms177456.aspx