sql >> Database teknologi >  >> RDS >> PostgreSQL

Valg af det rigtige indeks til PostgreSQL-forespørgsel

Opret et delvist indeks med flere kolonner med denne særlige sorteringsrækkefølge:

CREATE INDEX products_status_sales_partial_idx ON products (status, sales DESC)
WHERE  category NOT IN ('cat3','cat7');

Rediger din forespørgsel en smule:

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

Tilføjer status som første element i ORDER BY klausul virker overflødig og meningsløs. Men prøv det.

Hvorfor?

Forespørgselsplanlæggeren er ikke smart nok til at forstå, det med

WHERE  status = 'something' ...
ORDER  BY sales DESC

sorteringsrækkefølgen af ​​indekset (status, sales DESC) matcher som en logisk konsekvens. Så den kommer til at læse alle kvalificerende rækker, sorter og vælg top 3.

Ved at tilføje status til ORDER BY du aktiverer forespørgselsplanlæggeren til at læse de øverste 3 poster fra indekset direkte. Forvent en fremskyndelse med flere størrelsesordener .

Testet med PostgreSQL 8.4 og 9.1.



  1. Hvordan får man adgang til databasen på en anden computer ved hjælp af java og jdbc og sql?

  2. Oracle SQL-erklæring for unikt tidsstempel for hver række

  3. PostgreSQL-forespørgsel efter en liste over tilladte værdier i en begrænsning?

  4. PDO, mysql, transaktioner og bordlåsning