Como saber quando / se eu tenho muitos índices?

26

Executando o Microsoft SQL Server Profiler de vez em quando, ele sugere um monte de novos índices e estatísticas para criar ("... melhoria estimada em 97% ...").

No meu entendimento cada índice agregado pode fazer uma SQL SELECTconsulta mais rápida, mas também uma UPDATEou INSERTconsulta mais lento desde que os índices têm de ser ajustados.

O que me pergunto é: quando tenho índices / estatísticas "demais"?

Talvez não exista uma resposta clara sobre isso, mas algumas regras práticas.

Uwe Keim
fonte
Obrigado, @Nick. Pesquisei cuidadosamente o Google e o dba.se.com antes de postar minha pergunta. Na minha opinião, isso não tem relação alguma. Não quero saber se um índice é necessário, mas como determinar quando muitos índices tornam UPDATEe as INSERTinstruções muito lentas.
Uwe Keim
3
Você leu as respostas lá? A resposta aceita, por exemplo, vincula a alguns scripts de análise que podem ajudá-lo a identificar índices não utilizados que devem ser removidos. Você pode achar isso útil para responder à sua pergunta sobre quando você tem índices "demais".
Nick Chammas
2
Consulte também dba.stackexchange.com/q/3831/630
gbn

Respostas:

24

Seu perfil de carregamento é o fator mais importante para responder a esta pergunta.

  • Se sua carga exigir muita leitura, você deseja que os índices satisfaçam suas consultas mais pesadas ou mais frequentes.

  • Se sua carga exigir muita gravação, indexe com cuidado. Índice para satisfazer uma busca que um UPDATE precisa, por exemplo, assim como seus um ou dois SELECTs mais caros.

  • Se a sua carga for OLAP, indexe com moderação, pois você examinará as tabelas de destino de qualquer maneira.

Como você sabe que possui muitos índices?

  • Quando você pode ver que alguns deles não são usados por nenhuma consulta.

  • Um DELETE, UPDATE ou INSERT frequente mostra um plano de consulta que envolve várias alterações caras no índice (por exemplo , inserção , atualização ou exclusão de índice não clusterizado ). Use seu julgamento para determinar se a penalidade nessas instruções DML vale o ganho que você está obtendo dos índices que precisam ser atualizados.

Nick Chammas
fonte
8

Se você possui índices que estão sendo mantidos, mas nunca estão sendo usados ​​(ou raramente estão sendo usados), você deve ter muitos índices. Se todos os seus índices estiverem sendo usados ​​para melhorar o desempenho do usuário, você não precisará de muitos.

mrdenny
fonte
Posso sugerir alterar as duas ocorrências de " para " para " também ", pois não posso editá-las, pois minha edição precisaria alterar no mínimo 6 caracteres?
Uwe Keim 19/06