sql >> Database >  >> RDS >> PostgreSQL

Langzame OR-instructie in postgresql

Geheel nieuwe aanpak. Je where voorwaarde is op twee tafels, maar dat lijkt niet nodig.

De eerste verandering zou zijn:

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

Ik denk dat de gewenste structuur een scan is op de categorietabel en vervolgens wordt opgehaald uit de advertentietabel. Om u te helpen, kunt u een index maken op advert(advert_category_id, created_date) .

Ik zou in de verleiding komen om de query te schrijven door de where . te verplaatsen clausule in een subquery. Ik weet niet of dit de prestaties zou beïnvloeden:

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;  


  1. Hoe te werken met PL/SQL-arrays of verzamelingen als parameters en ze vervolgens samen te voegen via index

  2. Hoe integer-waarden valideren om SQL-injectie te voorkomen?

  3. Gegevens ophalen uit Mysql en converteren naar PHP-array

  4. Retourneer willekeurige rijen van een tabel in MariaDB