
Além de desperdiçar espaço no banco de dados, índices desnecessários no SQL Server podem retardar as operações de inserção e atualização. Os desenvolvedores que não têm experiência em princípios de banco de dados às vezes tendem a criar índices de tabelas que não fazem sentido para as consultas em execução.
Existe um procedimento ou ferramenta comum para o SQL Server 2005/2008 para analisar a carga de trabalho do banco de dados e dar dicas de quais índices nunca são usados ou não são necessários em um determinado banco de dados operacional?
Obrigado!
Responder1
Estou vendo um script T-SQL bonitinho aqui (http://blog.sqlauthority.com/2008/02/11/sql-server-2005-find-unused-indexes-of-current-database/) para mostrar índices não utilizados que devem ser executados no SQL Server 2005. Outrohttp://aspadvice.com/blogs/ssmith/archive/2008/03/31/Find-Unused-SQL-2005-Indexes-for-Current-DB.aspxaqui também.
Parece que dm_db_index_usage_stats é a chave para tudo isso. Muito arrumado! (Verhttp://msdn.microsoft.com/en-us/library/ms188755.aspx Vou ter que dar uma olhada em alguns bancos de dados de produção que criei agora para ver como são essas estatísticas. (sorriso)
Editar: alguns antecedentes adicionais muito bons aqui:http://blogs.msdn.com/craigfr/archive/2008/10/30/what-is-the-difference-between-sys-dm-db-index-usage-stats-and-sys-dm-db- índice-operacional-stats.aspx
Responder2
Algumas coisas a ter em mente sobre o uso de sys.dm_db_index_usage_stats:
- A saída contém apenas índices que foram usados desde a última vez que o banco de dados foi iniciado. Quando um banco de dados é encerrado, todas as entradas do cache de informações da memória desse banco de dados são removidas. Da mesma forma, o cache não sobrevive a uma reinicialização instantânea. Não há como limpar manualmente as entradas de um banco de dados específico sem reiniciar o banco de dados. Os vários artigos referenciados na primeira resposta (e também no meu blog) descrevem como capturar a saída em vários momentos para fazer análises de séries temporais.
- Não deixe de testar seuinteirociclo de negócios. Você não deseja remover um índice usado para um relatório de final de mês ou consulta ao CEO, mesmo que isso seja tentador.
- Certifique-se de compreender as várias contagens e o que elas significam antes de tomar uma decisão sobre se o índice está sendo usado de forma lucrativa ou simplesmente mantido às custas.
Espero que isto ajude.
PS Mais uma coisa para quem está lendo isso e se perguntando se existe um método equivalente para o SQL Server 2000 - não, nós (como eu estava na equipe na época) adicionamos o recurso apenas a partir de 2005.
Responder3
Temos um artigo wiki no SQLServerPedia com um script para fazer isso, além de um vídeo tutorial sobre como usá-lo:
Um para encontrar índices que não estão sendo usados:
http://sqlserverpedia.com/wiki/Find_Indexes_Not_In_Use
E outro para encontrar índices que você deve adicionar:
Responder4
Fiz algumas consultas relacionadas ao índice e mostrei isso em meu blog (http://dbalink.wordpress.com/2008/11/09/how-to-finding-index-usage-stats-with-dmv-in-tsql/)