Identificando índices duplicados

Olá, pessoal

O assunto de hoje é sobre a identificação de índices duplicados. Um problema que tenho visto em alguns clientes que tenho trabalhado é a quantidade de índices duplicados que existem nas tabelas, então posto aqui uma maneira de indentificar estes índices. Junto a isso apresento uma maneira interessante do uso da claúsula ORDER BY.

SELECT pg_stat_user_indexes.schemaname AS nome_do_esquema,
pg_stat_user_indexes.relname AS nome_da_tabela,
pg_attribute.attname AS nome_do_atributo,
pg_stat_user_indexes.indexrelname AS nome_do_indice,
CASE pg_index.indisprimary
WHEN ‘t’ THEN ‘Sim’
ELSE ‘Nao’
END AS indice_na_chave_primaria
FROM pg_index JOIN pg_stat_user_indexes USING (indexrelid)
JOIN
(SELECT pg_index.indrelid,
pg_index.indkey,
count(*)
FROM pg_index JOIN pg_stat_user_indexes USING (indexrelid)
GROUP BY pg_index.indrelid,
pg_index.indkey
HAVING count(*)>1) ind_dup ON pg_index.indrelid=ind_dup.indrelid
AND pg_index.indkey=ind_dup.indkey
JOIN pg_attribute ON pg_attribute.attrelid=ind_dup.indrelid
AND pg_attribute.attnum=SOME(pg_index.indkey)
ORDER BY pg_stat_user_indexes.schemaname,
pg_stat_user_indexes.relname,
pg_index.indisprimary=’t’ DESC;

O SQL acima apresenta como resultado o nome do esquema que a tabela pertence, o nome da tabela, o atributo indexado, o nome do índice e se o índice está associado a uma chave primária.

Uma questão interessante que acabei descobrindo é poder fazer uma comparação na claúsula ORDER BY. No exemplo acima a ordenação é pelo nome do esquema, nome da tabela e pelo atributo pg_index.indisprimary=’t’ que ordena primeiramente pelo índice que está associado a uma chave primária.

Eu sabia que era possível usar operadores na claúsula ORDER BY mas imaginava que só era possível usar a seguinte estrutura:

ORDER BY atributo USING <; para ordenação crescente e  ORDER BY atributo USING >; para ordenação decrescente.

Era isso. Fiquem a vontade para comentários.

[]s

Anúncios

Publicado em 18 de novembro de 2008, em PostgreSQL e marcado como , , . Adicione o link aos favoritos. Deixe um comentário.

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

%d blogueiros gostam disto: