Usuário com melhor resposta
Diferença entre Unique Constraint e Unique Index

Pergunta
-
Povo,
Qual é a diferença entre Unique Constraint e Unique Index além da sintaxe? Perfomance, quando usar, qual é o recomendado, etc.
O Forte Sobreviverá e o Fraco irá Sofrer
- Movido Roberson Ferreira _ quarta-feira, 10 de outubro de 2012 19:10 (De:SQL Server - Desenvolvimento Geral)
Respostas
-
Pabloslobo, existem algumas diferenças como :
- Sintaxe de uso para criar , alterar e apagar
- Sao registrados em tabelas diferentes (sys*)
- Para indice unique o registro é validado linha a linha.
- Para tabelas logadas as constraints sao validadas apenas no final de cada sql INSERT/UPDATE/DELETE.
- É possivel alterar esta checagem para o final da transação (commit) utilizando
SET CONSTRAINTS [ALL|cons] DEFERRED
- Quando criado um indice unique nos campos de uma tabela e em seguida uma constraint unique para os mesmos campos , a constraint reaproveita o indice existente e as regras para validar o unique prevalece a da constraint, ou seja, as alterações são validadas no final SQL.
Para performance deve usar o indice, ja que a constraint não ajudará na performance e sim na integridade dos dados.
Alexandre Matayosi Conde Mauricio. Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.
- Sugerido como Resposta Alexandre Matayosi terça-feira, 9 de outubro de 2012 21:15
- Marcado como Resposta pabloslobo terça-feira, 9 de outubro de 2012 21:25
Todas as Respostas
-
Pabloslobo, existem algumas diferenças como :
- Sintaxe de uso para criar , alterar e apagar
- Sao registrados em tabelas diferentes (sys*)
- Para indice unique o registro é validado linha a linha.
- Para tabelas logadas as constraints sao validadas apenas no final de cada sql INSERT/UPDATE/DELETE.
- É possivel alterar esta checagem para o final da transação (commit) utilizando
SET CONSTRAINTS [ALL|cons] DEFERRED
- Quando criado um indice unique nos campos de uma tabela e em seguida uma constraint unique para os mesmos campos , a constraint reaproveita o indice existente e as regras para validar o unique prevalece a da constraint, ou seja, as alterações são validadas no final SQL.
Para performance deve usar o indice, ja que a constraint não ajudará na performance e sim na integridade dos dados.
Alexandre Matayosi Conde Mauricio. Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.
- Sugerido como Resposta Alexandre Matayosi terça-feira, 9 de outubro de 2012 21:15
- Marcado como Resposta pabloslobo terça-feira, 9 de outubro de 2012 21:25
-
Ou seja, quando quero verificar se duas ou mais colunas são únicas linha a linha e quero que estas mesmas colunas passem por um processo de otimização pois serão altamente consultadas/retornadas, utilizo UNIQUE INDEX sem problemas de performance.
A dúvida é: Se UNIQUE INDEX me permite verificar integridade dos dados, qual seria o problema de ter as tabelas necessárias somente com UNIQUE INDEXEs no lugar de UNIQUE Constraint ?
O Forte Sobreviverá e o Fraco irá Sofrer
-
Só não se esqueça que indices ocupam um espaço consideravel no servidor ao contrario das constraints, quando voce realiza alguma operação de insert, update ou delete as constraints só fazem a validação da integridade, os indices podem ficar fragmentados e insert e update quando na coluna indexada pode levar mais tempo para o indice se ajeitar, depende de cada caso qual é o melhor utilizar.
Alexandre Matayosi Conde Mauricio. Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.
-