🔍 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?
-
sys.tables: Obtém a lista de tabelas do banco de dados.
-
sys.indexes: Obtém os índices associados às tabelas.
-
sys.index_columns: Mapeia quais colunas fazem parte dos índices.
-
sys.all_columns: Obtém os nomes das colunas indexadas.
-
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.
-
-
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.