Temos duas colunas is_unique
e is_unique_constraint
para restrições únicas sys.indexes
e quero esclarecer alguns conceitos com base nessas duas colunas
- A instrução de criação para ambos os tipos de índices é a mesma, exceto
fill factor
o valor da propriedade ou estou perdendo alguma coisa? - Se a declaração 1 for verdadeira, por que temos duas colunas em sys.indexes para restrição exclusiva?
Quando
is_unique=1 is_unique_constraint =0
e, em seguida, solte a instrução para o índice é
DROP INDEX [index name] ON [dbo].[TableName] WITH ( ONLINE = OFF )
E quando
is_unique=1 is_unique_constraint =1
e, em seguida, solte a instrução para o índice é
ALTER TABLE [dbo].[TableName] DROP CONSTRAINT [IndexName]
Por que?
Onde usamos índice exclusivo e onde restrição exclusiva, qual é a melhor prática?
O fato é que não há diferença prática entre uma restrição única e um índice único.
sys.objects
, você encontrará a restrição exclusiva listada como um objeto de restrição e seu índice relacionado pode ser encontrado durante a consultasys.indexes
, onde está marcadois_unique = 1
, bem comois_unique_constraint = 1
. Por outro lado, para índices únicosis_unique_constraint
, o valor será zero (0).FILLFACTOR, PAD_INDEX, IGNORE_DUP_KEY, DROP_EXISTING, and STATISTICS_NORECOMPUTE
.is_unique_constraint = 1
, é necessário excluí-lo através da sintaxe DROP CONSTRAINT ao invés de DROP INDEX porque tal índice está associado a uma restrição única (objeto), então deve-se remover CONSTRAINT e o índice será descartado automaticamente.Como prática recomendada , se a exclusividade for necessária, aplique sempre a restrição exclusiva, em vez de criar apenas um índice exclusivo. Desta forma, você não pode descartar um índice único acidentalmente. Também desta forma, você pode documentar facilmente todas as restrições aplicadas.
http://technet.microsoft.com/en-us/library/aa224827(v=sql.80).aspx
Além da resposta dos aasims, a única grande diferença aqui
Unique Index
é que não é um objeto de banco de dados. Enquanto aunique Constraint
é um objeto.No entanto, além disso, não há outras diferenças importantes:
EDITAR:
Por que você usaria índice exclusivo vs restrição, qual é a melhor prática?
Não há uma prática recomendada de tamanho único aqui. Por uma razão principal (pelo menos). Uma restrição exclusiva permite apenas um valor nulo na coluna. No entanto, você pode criar um índice exclusivo sem incluir os
null
valores:Isso criaria o índice, mas SOMENTE onde os valores na coluna Email não são nulos.