Identificando Índices Não Utilizados no SQL Server


Índices são recursos poderosos para acelerar consultas no SQL Server, mas quando criados sem critério ou abandonados com o tempo, podem se transformar em vilões silenciosos. Eles ocupam espaço, impactam negativamente operações de escrita (inserts, updates e deletes) e ainda aumentam o tempo dos backups.
Neste post, vamos abordar como identificar índices que não estão sendo utilizados e que, portanto, podem ser candidatos à remoção ou reavaliação.
Por que remover índices não utilizados?
Quando um índice não é aproveitado pelas consultas do sistema, ele deixa de trazer benefícios e passa a:
Aumentar o tempo de escrita nas tabelas (porque cada alteração precisa atualizar todos os índices);
Ocasionar maior consumo de espaço em disco;
Prejudicar o desempenho geral do banco em cenários com alta carga de escrita;
Tornar o plano de manutenção mais pesado (Reorganize, Rebuild, etc);
Inchar os backups e aumentar o tempo de restore.
Por isso, é fundamental analisar o uso real dos índices e realizar limpezas periódicas.
Consulta para identificar índices sem uso relevante
O script abaixo utiliza a DMV sys.dm
_db_index_usage_stats
em conjunto com a sys.indexes
para exibir os índices de usuários que não são do tipo CLUSTERED e que possuem baixo volume de uso em operações como Seek, Scan e Lookup:
SELECT OBJECT_NAME(a.[object_id]) as Tabela,
b.[name] as Indice, b.[type_desc] as Tipo,
case when b.is_primary_key = 1
then'Sim' else 'Não' end as PK,
a.user_seeks as Seeks,
a.user_scans as Scans,
a.user_lookups as Lookups,
a.user_seeks + a.user_scans +
a.user_lookups as TotalOperacoes
FROM sys.dm_db_index_usage_stats a
JOIN sys.indexes b on a.[object_id] = b.[object_id] and a.index_id = b.index_id
WHERE b.[name] is not null
and b.[type_desc] <> 'CLUSTERED'
and OBJECTPROPERTY(a.[object_id],'IsUserTable') = 1
ORDER BY TotalOperacoes
Como interpretar os resultados
Seeks: consultas que buscaram diretamente por valores indexados.
Scans: varreduras completas feitas no índice.
Lookups: operações de busca complementares a partir de índices não cobertos.
TotalOperacoes: soma de todas as vezes que o índice foi utilizado por consultas.
Índices com TotalOperacoes igual a zero não foram utilizados desde que o SQL Server foi reiniciado (ou desde o último reset nas estatísticas da DMV). Isso já acende um alerta!
⚠️ Atenção: essas estatísticas são zeradas após o restart do SQL Server. Portanto, execute essa análise em um ambiente que esteja em funcionamento há pelo menos alguns dias (ou semanas) para uma leitura mais confiável.
✅ Quando realizar essa análise?
Durante atividades de tuning de performance;
Quando há necessidade de reduzir o consumo de disco;
Antes de executar planos de manutenção ou reorganização de índices;
Ao revisar o design de índices em ambientes legados ou recebidos de terceiros;
Durante processos de migração ou auditoria de infraestrutura.
🔒 Remover ou alterar: qual decisão tomar?
Se um índice não está sendo utilizado, as opções são:
Remover — caso ele realmente não traga nenhum benefício identificado.
Recriar com outras colunas — se houver potencial de uso, mas o design atual não está adequado.
Converter em índice filtrado — quando é útil apenas para subconjuntos de dados.
Toda alteração em índices deve passar por validação em ambiente de homologação e análise de impacto com o time de desenvolvimento.
Fui, mas volto com mais SQL Server em breve!
✍️ Sobre o autor
O Prof. Landry é especialista em Microsoft SQL Server desde 1999, Microsoft Trainer, Professor Universitário e criador do canal SQL Server Expert no YouTube, com conteúdo técnico semanal para DBAs e profissionais de dados.
🚀 Quer aprender mais sobre SQL Server?
👉 Me acompanhe no LinkedIn e inscreva-se no canal para não perder nenhuma dica prática!
Subscribe to my newsletter
Read articles from SQL Server Expert directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by

SQL Server Expert
SQL Server Expert
O Prof. Landry Duailibe é especialista em Microsoft SQL Server desde 1999, Microsoft Certified Trainer, professor universitário e criador do canal SQL Server Expert no YouTube, onde compartilha conteúdo técnico semanal para DBAs e profissionais de dados. Já ajudou milhares de alunos a evoluírem suas habilidades com SQL Server e conquistarem melhores oportunidades na área de dados.