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

Postgresql 9.x:Índice para otimizar consultas `xpath_exists` (XMLEXISTS)

Parâmetros de custo do planejador


Isso me diz que seu random_page_cost e seq_page_cost provavelmente estão errados. Você provavelmente está em armazenamento com E/S aleatória rápida - porque a maior parte do banco de dados é armazenada em cache na RAM ou porque você está usando SSD, SAN com cache ou outro armazenamento em que a E/S aleatória é inerentemente rápida.

Tentar:
SET random_page_cost = 1;
SET seq_page_cost = 1.1;

para reduzir bastante as diferenças de parâmetros de custo e, em seguida, executar novamente. Se isso funcionar, considere alterar esses parâmetros em postgresql.conf. .

Suas estimativas de contagem de linhas são razoáveis, portanto, não parece um problema de estimativa incorreta do planejador ou um problema com estatísticas de tabela incorretas.

Consulta incorreta


Sua consulta também está incorreta. OFFSET 0 LIMIT 1 sem um ORDER BY produzirá resultados imprevisíveis, a menos que você tenha exatamente uma correspondência, nesse caso o OFFSET ... LIMIT ... cláusulas são desnecessárias e podem ser removidas inteiramente.

Geralmente, é muito melhor formular consultas como SELECT max(...) ou SELECT min(...) sempre que possível; O PostgreSQL tenderá a ser capaz de usar um índice apenas para extrair o valor desejado sem fazer uma varredura de tabela cara ou uma varredura e classificação de índice.

Dicas


BTW, para perguntas futuras, o wiki do PostgreSQL tem algumas boas informações na categoria de desempenho e um guia para fazer perguntas de consulta lenta .