Relacionando as colunas de cada índice do SQL Server

Da mesma forma que é possível relacionar as colunas de cada tabela no SQL Server, podemos aplicar o mesmo conceito sobre os índices, tornando um recurso útil para identificar índices muito semelhantes (ou até mesmo, combinar com consultas que relacionam informações sobre fragmentação e utilização dos índices):

SELECT s.name as [schema], t.name as [table]

-- Detalhes do índice
, i.[type_desc], i.[is_primary_key], i.[is_unique], i.[is_unique_constraint]
, ISNULL(i.name, '') AS [index]
, ISNULL(SUBSTRING(c.[indexed], 0, LEN(c.[indexed])), '') AS [indexed]
, ISNULL(SUBSTRING(c.[included], 0, LEN(c.[included])), '') AS [included]

-- Filtro utilizado pelo índice
, ISNULL(i.filter_definition, '') AS [filtered]

FROM sys.schemas s
INNER JOIN sys.tables t
ON s.[schema_id] = t.[schema_id]
INNER JOIN sys.indexes i
ON t.[object_id] = i.[object_id]

-- Relação de colunas que formam o índice
CROSS APPLY (
	SELECT (
		SELECT c.name + ', '
		FROM sys.columns c
		INNER JOIN sys.index_columns ic
		ON c.[object_id] = ic.[object_id]
		AND c.[column_id] = ic.[column_id]
		WHERE t.[object_id] = c.[object_id]
		AND ic.[index_id] = i.[index_id]
		AND ic.[is_included_column] = 0
		ORDER BY [key_ordinal]
		FOR XML PATH('')
	) AS [indexed]
	,(
		SELECT c.name + ', '
		FROM sys.columns c
		INNER JOIN sys.index_columns ic
		ON c.[object_id] = ic.[object_id]
		AND c.[column_id] = ic.[column_id]
		WHERE t.[object_id] = c.[object_id]
		AND ic.[index_id] = i.[index_id]
		AND ic.[is_included_column] = 1
		ORDER BY [key_ordinal]
		FOR XML PATH('')
	) AS [included]
) AS c
ORDER BY [schema], [table]

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s