PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Langsame OR-Anweisung in postgresql

Völlig neuer Ansatz. Ihr where Bedingung ist auf zwei Tabellen, aber das scheint unnötig.

Die erste Änderung wäre:

where a1_.id = 1136 or a1_.parent_id = 1136

Ich denke, die gewünschte Struktur ist ein Scan der Kategorietabelle und ein Abruf aus der Anzeigentabelle. Zur Unterstützung können Sie einen Index für advert(advert_category_id, created_date) erstellen .

Ich wäre versucht, die Abfrage durch Verschieben des where zu schreiben -Klausel in eine Unterabfrage. Ich weiß nicht, ob dies die Leistung beeinträchtigen würde:

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;