Querys do Dia a Dia: Como visualizar as colunas INCLUDE de um Índice
Fala Pessoal,
Diariamente preciso visualizar todos os índices de uma tabela para analisar a criação, alteração ou exclusão de um índice.
A forma mais rápida de ver os índices de uma tabela específica é selecionar o nome da tabela e apertar Alt+f1. Entretanto, essa maneira não nos mostra as colunas da cláusula include de um índice. Para obter essa informação, utilizo a query abaixo:
DECLARE @Nm_Tabela varchar(30)
SET @Nm_Tabela = ‘Nome_Tabela’
SELECT SCHEMA_NAME (o.SCHEMA_ID) SchemaName
,o.name ObjectName,i.name IndexName
,i.type_desc
,LEFT(list, ISNULL(splitter-1,len(list))) Columns
, SUBSTRING(list, indCol.splitter +1, 1000) includedColumns–len(name) – splitter-1) columns
, COUNT(1) over (partition by o.object_id)
FROM sys.indexes i
join sys.objects o on i.object_id = o.object_id
cross apply (select NULLIF(charindex(‘|’,indexCols.list),0) splitter , list
from (select cast((
select case when sc.is_included_column = 1 and sc.ColPos = 1 then’|’ else ” end +
case when sc.ColPos > 1 then ‘, ‘ else ” end + name
from (select sc.is_included_column, index_column_id, name
, ROW_NUMBER() over (partition by sc.is_included_column
order by sc.index_column_id)ColPos
from sys.index_columns sc
join sys.columns c on sc.object_id = c.object_id
and sc.column_id = c.column_id
where sc.index_id = i.index_id
and sc.object_id = i.object_id ) sc
order by sc.is_included_column
,ColPos
for xml path (”), type) as varchar(max)) list)indexCols ) indCol
WHERE indCol.splitter is not null
and o.name = @Nm_Tabela
ORDER BY SchemaName, ObjectName, IndexName
Entretanto, essa query retorna apenas os índices que possuem a cláusula INCLUDE. Para ver todos os índices com ou sem a cláusula INCLUDE podemos utilizar uma procedure cujo código foi disponibilizado por Kimberly L. Tripp (Blog|Twitter): sp_helpindex_2. Depois de criar a procedure, basta executá-la conforme a figura abaixo:
Gostou dessa dica?
Cadastre seu e-mail para receber novos Posts e curta minha Página no Facebook para receber Dicas de Leituras e Eventos sobre SQL Server.
Aprenda a criar essa e outras rotinas para administrar melhor seu SQL Server no meu Treinamento de Tarefas do Dia a Dia de um DBA.
Abraços,
Fabrício Lima
MCITP – Database Administrator
Consultor e Instrutor SQL Server
Trabalha com SQL Server desde 2006
Fabrício sempre me salvando…
Nice.