Sql Server – Indices – Obtendo membros integrantes

Após alterar uma table-function cuja performace é totalmente dependente do uso de um índice nonclustered – criado justamente para ela -, percebo analisando o plano de execução que:

– As novas colunas que incluí, como resultado do select em questão, utiliza o índice cluster da tabela em comunhão com o índice noncluster.

Isto se deu pelo simples fato do índice não mantê-las. Logo o SGBD utilizou o índice noncluster para aplicar o where e, obter alguns membros que já faziam parte do include do mesmo, + o índice cluster da tabela para obter os membros faltantes.

Parece simples, sp_help ou sp_helpindex bastaria para exibir os membros indexados e includes do índice em questão, certo? Quem dera! Ambos exibem apenas os membros indexados. Ou seja, includes de fora.

Mãos à obra…

select ixs.*, ixsc.*, syscol.*
from sys.indexes ixs
    inner join sys.index_columns ixsc
       on   ixsc.index_id = ixs.index_id
	and ixsc.object_id = ixs.object_id
    inner join sys.columns syscol
       on   syscol.column_id = ixsc.column_id
        and syscol.object_id = ixsc.object_id
where ixs.name='MeuIndice'

Para sanar minha dúvida, bastou observar o retorno de ixsc.is_included_column. Mas note quanta informação valiosa é possível obter sobre o índice e seus membros.

T+

Anúncios

Deixe um comentário

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