Skip Navigation Links
Novas Tecnologias
Ferramentas Adicionais
Ferramentas Adicionais


Dica No :
23
Assunto : SQL Server
Titulo: Identificar índices em modelos de dados

Gostou do texto ? Vote e dê sua opinião! Pontuação atual :

Translate this page now :






Adicione aos Favoritos!
BlogBlogs Rec6 Linkk Ueba Technorati Delicious DiggIt! StumbleUpon



Saber os índices que uma tabela possui é muito simples : basta utilizar sp_helpindexes. Mas é comum desejar-se saber quais índices existem em toda a base de dados, quais tabelas possuem e não possuem índice e quais tabelas não possuem índice Clustered.

Para resolver esta questão precisaremos recorrer as tabelas do sistema. Deveremos utilizar 2 : a tabela sysobjects guarda informações sobre os objetos existentes, no caso, as tabelas, enquanto que a tabela sysindexes guarda informações sobre os índices.

1o Passo : Fazer um relacionamento entre as 2 tabelas

select * from sysobjects a,sysindexes b where a.id=b.id

Bem simples, o campo de ligação das duas tabelas chama-se id, é o identificador de um objeto no SQL Server.

2o Passo : Filtrar o resultado -

A) A sysindexes possui uma linha com indid 0 que representa a propria tabela. Essa linha nao deve ser mostrada
B) O SQL Server cria estatisticas de distribuicao de dados em campos nao indexados e tais estatisticas aparecem na sysindexes como se fossem indices. Não devem ser mostradas
C) Tabelas do sistema não devem ser exibidas.

Assim sendo :

select * from sysobjects a,sysindexes b where a.id=b.id where a.id=b.id and indid<>0 and a.id>100 and left(b.name,1)<>"_"

Filtrou-se o indid, IDs maiores que 100 para não exibir tabelas do sistema e fez-se uma filtragem no nome para eliminar as estatísticas de distribuição, que sempre se iniciam com "_"

3o Passo : Limitar os campos no resultado

select left(a.name,35) as tabela,left(b.name,40) as indice from sysobjects a,sysindexes b where a.id=b.id where a.id=b.id and indid<>0 and a.id>100 and left(b.name,1)<>"_"

Utilizou-se o left para eliminar o excesso de espaço e garantir que o resultado será fácil de imprimir.

4o Passo : Informar se o índice é clustered ou nonClustered

select left(a.name,35) as tabela,left(b.name,40) as indice,
case b.indid
when 1 then "Clustered"
else "NonClustered"
end as Tipo from sysobjects a,sysindexes b where a.id=b.id where a.id=b.id and indid<>0 and a.id>100 and left(b.name,1)<>"_"

Foi utilizada uma instrução CASE para identificar o tipo do índice baseado em seu indid

5o Passo : Ordenar os dados

select left(a.name,35) as tabela,left(b.name,40) as indice,
case b.indid
when 1 then "Clustered"
else "NonClustered"
end as Tipo from sysobjects a,sysindexes b where a.id=b.id where a.id=b.id and indid<>0 and a.id>100 and left(b.name,1)<>"_" order by a.name,b.indid

6o Passo : Criar uma procedure

Create procedure ExibirIndices As
select left(a.name,35) as tabela,left(b.name,40) as indice,
case b.indid
when 1 then "Clustered"
else "NonClustered"
end as Tipo from sysobjects a,sysindexes b where a.id=b.id where a.id=b.id and indid<>0 and a.id>100 and left(b.name,1)<>"_" order by a.name,b.indid

A partir dai sempre que necessitar desta informação bastará utilizar "EXEC ExibirIndices"


P.S : O treinamento de Banco de dados com SQL Server 7, preparatório para certificação Microsoft, irá se iniciar na próxima 3a feira a noite, com duração de duas semanas. Mais informações em nosso site : http://www.bufaloinfo.com.br

Nome :
E-mail:
Comentarios :
 
 
Os Últimos Comentários
Nenhum comentário foi realizado ainda. Seja o primeiro !
Dicas
Dica do Dia
Receba Dicas Por Email
E-mail :  
 


 (help)
Aceito receber informativos do devASPNet, informações de eventos e treinamentos

Veja Quais Informativos Você Receberá

Pesquisar Dicas
Pesquisar Artigos, Dicas e Noticias

Banco de Dados
Algumas Entrevistas
Links Importantes

Búfalo Informática, Treinamento e Consultoria
R. Alvaro Alvim, 37/920 Centro - Cinelândia - Rio de Janeiro Cep: 20031-010
Tel : (21) 2262-1368 (21) 9240-5134 E-mail : Contato@bufaloinfo.com.br