PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Escolhendo o índice certo para a consulta do PostgreSQL


Crie um índice parcial de várias colunas com esta ordem de classificação específica:
CREATE INDEX products_status_sales_partial_idx ON products (status, sales DESC)
WHERE  category NOT IN ('cat3','cat7');

Modifique sua consulta um pouco:


SELECT product_no, sales 
FROM   products 
WHERE  status = 'something'
AND    category NOT IN ('cat3', 'cat7') 
ORDER  BY status, sales DESC 
LIMIT  3;

Adicionando status como primeiro elemento do ORDER BY cláusula parece redundante e inútil. Mas dá-lhe uma chance.

Por quê?


O planejador de consultas não é inteligente o suficiente para entender que, com
WHERE  status = 'something' ...
ORDER  BY sales DESC

a ordem de classificação do índice (status, sales DESC) correspondências como uma consequência lógica. Então ele vai ler todos linhas qualificadas, classifique e escolha as 3 primeiras.

Adicionando status para o ORDER BY você permite que o planejador de consultas leia as 3 principais entradas do índice diretamente. Espere uma aceleração de várias ordens de magnitude .

Testado com PostgreSQL 8.4 e 9.1.