SQL Server: Explorando e Entendendo a Estrutura de Índices de uma Tabela ✨

🔍 Introdução

Os índices são componentes essenciais para a performance das consultas em um banco de dados SQL Server. Eles permitem que a busca por informações seja mais eficiente, reduzindo o tempo de resposta das consultas. A query abaixo tem como objetivo listar os índices existentes em tabelas específicas, detalhando quais colunas estão indexadas.


 

⚙️ A Query Explicada

SELECT OBJECT_SCHEMA_NAME(BaseT.[object_id],DB_ID()) AS [Schema],
 BaseT.[name] AS [table_name], I.[name] AS [index_name], AC.[name] AS [column_name],
 I.[type_desc]
FROM sys.[tables] AS BaseT
 INNER JOIN sys.[indexes] I ON BaseT.[object_id] = I.[object_id]
 INNER JOIN sys.[index_columns] IC ON I.[object_id] = IC.[object_id]
 INNER JOIN sys.[all_columns] AC ON BaseT.[object_id] = AC.[object_id] AND IC.[column_id] = AC.[column_id]
WHERE BaseT.[is_ms_shipped] = 0 AND I.[type_desc] <> 'HEAP'
and BaseT.[name] in ('NF','NFItem')
ORDER BY BaseT.[name], I.[index_id], IC.[key_ordinal];

 

🔎 Objetivo

Esta query tem a função de listar todos os índices associados às tabelas NF e NFItem. O resultado exibe:

  • Schema da tabela

  • Nome da tabela

  • Nome do índice

  • Nome da coluna indexada

  • Tipo do índice (Clustered, NonClustered, etc.)


 

🔍 Como Funciona?

  1. sys.tables: Obtém a lista de tabelas do banco de dados.

  2. sys.indexes: Obtém os índices associados às tabelas.

  3. sys.index_columns: Mapeia quais colunas fazem parte dos índices.

  4. sys.all_columns: Obtém os nomes das colunas indexadas.

  5. Filtros Aplicados:

    • BaseT.[is_ms_shipped] = 0 -> Ignora objetos do sistema.

    • I.[type_desc] <> 'HEAP' -> Exclui tabelas sem índices.

    • BaseT.[name] in ('NF','NFItem') -> Filtra apenas as tabelas desejadas.

  6. Ordenação: Agrupa os resultados por tabela, índice e a ordem das colunas indexadas.


 

📊 Exemplo de Saída

Schema Table Name Index Name Column Name Type Desc
dbo NF IX_NF_Numero Numero NONCLUSTERED
dbo NF IX_NF_Data DataEmissao NONCLUSTERED
dbo NFItem PK_NFItem ID CLUSTERED
dbo lNFItem IX_NF_Produto ProdutoID NONCLUSTERED

 

⚠️ Cuidados e Considerações

  • Esta query não cria índices, apenas os lista.

  • Índices inadequados podem impactar a performance de escrita.

  • Certifique-se de revisar os índices existentes antes de criar novos.


 

🚀 Conclusão

Essa query é útil para analisar a estrutura de índices no SQL Server, ajudando na otimização de desempenho. Com essa informação, os desenvolvedores e DBAs podem decidir quais índices são realmente necessários e quais podem ser removidos ou ajustados.

 

Data de Publicação: 15-02-2025

Categoria: SQL Server