none
Diferença entre Unique Constraint e Unique Index RRS feed

  • 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)
    terça-feira, 9 de outubro de 2012 20:57

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
    terça-feira, 9 de outubro de 2012 21:14

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
    terça-feira, 9 de outubro de 2012 21:14
  • 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

    terça-feira, 9 de outubro de 2012 21:29
  • 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.

    terça-feira, 9 de outubro de 2012 21:36
  • Posso ter constraints p/ verificar integridade de duas ou mais colunas nas linhas da tabela e Indices separadas p essas colunas?

    O Forte Sobreviverá e o Fraco irá Sofrer

    terça-feira, 9 de outubro de 2012 22:02