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

Instrução OR lenta no postgresql


Abordagem inteiramente nova. Seu where condição está em duas tabelas, mas isso parece desnecessário.

A primeira mudança seria:
where a1_.id = 1136 or a1_.parent_id = 1136

Acho que a estrutura que você deseja é uma varredura na tabela de categorias e, em seguida, busca na tabela de anúncios. Para ajudar, você pode criar um índice em advert(advert_category_id, created_date) .

Eu ficaria tentado a escrever a consulta movendo o where cláusula em uma subconsulta. Não sei se isso afetaria o desempenho:
SELECT a0_.id AS id0
FROM   advert a0_ INNER JOIN
       (select ac.*
        from advertcategory ac
        where ac.id = 1136 or ac.parent_id = 1136
       ) ac
       ON a0_.advert_category_id = ac.id
ORDER  BY a0_.created_date DESC
LIMIT  15;