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:

  1. Remover — caso ele realmente não traga nenhum benefício identificado.

  2. Recriar com outras colunas — se houver potencial de uso, mas o design atual não está adequado.

  3. 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!

0
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.