SQL Server - quando usar índice clusterizado versus não clusterizado?

99

Conheço as principais diferenças entre índices clusterizados e não clusterizados e tenho uma compreensão de como eles realmente funcionam. Eu entendo como índices agrupados e não agrupados melhoram o desempenho de leitura. Mas uma coisa que não tenho certeza é quais seriam as razões pelas quais eu escolheria um em vez do outro.

Por exemplo: Se uma tabela não tem um índice clusterizado, deve-se criar um índice não clusterizado e qual é a vantagem de fazer

armulator
fonte
3
Obrigado por responder. Já estou ciente disso. Minha pergunta é se haveria uma situação em que a criação de um índice não agrupado se beneficiaria mais do que a criação de um índice agrupado
armulator
2
Sim, você deve evitar um índice clusterizado quando; a coluna tem baixa cardinalidade, nenhuma ordem particular, freqüentemente atualizada, não sequencial, é uma composição de muitas colunas ...
TI
Obrigado pela sua resposta. É útil
armulator
1
Talvez esta pergunta o ajude: stackoverflow.com/questions/5070529/…
David García González
Possível duplicata de Qual coluna o índice clusterizado deve ser colocado?
Michael Freidgeim

Respostas:

117

Só quero deixar um aviso: por favor, escolha com muito cuidado o seu índice clusterizado! Cada tabela de dados "normal" deve ter um índice clusterizado, já que ter um índice clusterizado realmente acelera muitas operações - sim, acelera , até mesmo inserções e exclusões! Mas apenas se você escolher um bom índice clusterizado.

É a estrutura de dados mais replicada em seu banco de dados SQL Server. A chave de cluster também fará parte de cada índice não clusterizado da sua tabela.

Você deve ter muito cuidado ao escolher uma chave de cluster - deve ser:

  • estreito (4 bytes ideal)

  • exclusivo (afinal, é o "ponteiro de linha". Se você não torná-lo exclusivo, o SQL Server fará isso em segundo plano, custando alguns bytes para cada entrada vezes o número de linhas e o número de índices não agrupados você tem - isso pode ser muito caro!)

  • estático (nunca mude - se possível)

  • idealmente sempre crescente para que você não termine com uma fragmentação de índice horrível (um GUID é o oposto total de uma boa chave de cluster - por esse motivo específico)

  • deve ser não anulável e, idealmente, também de largura fixa - a varchar(250)torna uma chave de clustering muito ruim

Qualquer outra coisa deve realmente ser o segundo e terceiro nível de importância por trás desses pontos ....

Veja algumas das postagens do blog de Kimberly Tripp ( The Queen of Indexing ) sobre o assunto - tudo o que ela escreveu em seu blog é absolutamente inestimável - leia, faça uma digestão - viva de acordo com isso!

marc_s
fonte
1
Obrigado marc_s pela explicação clara. Mas, tecnicamente falando, o que o non clusteredíndice faz por nós. quais são a sua importância ..?
hud
@nad: um índice não agrupado bem escolhido pode acelerar suas pesquisas - em vez de ter que comparar potencialmente milhões de linhas de dados com seus critérios de pesquisa, você pode encontrar uma determinada linha com apenas 4,5 comparações. Isso faz uma enorme diferença!
marc_s
1
@MuriloKunze: leia a postagem do blog de Kim Tripp sobre o assunto - ela explica em detalhes por que esse é o caso
marc_s
5
Sinto muito, mas onde está a resposta para a pergunta "SQL Server - Quando usar índice clusterizado versus não clusterizado?" ?
Eduard