sql >> Database >  >> RDS >> PostgreSQL

De juiste index kiezen voor PostgreSQL-query

Maak een gedeeltelijke index met meerdere kolommen met deze specifieke sorteervolgorde:

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

Pas uw zoekopdracht enigszins aan:

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

status toevoegen als eerste element van de ORDER BY clausule lijkt overbodig en zinloos. Maar probeer het eens.

Waarom?

De queryplanner is niet slim genoeg om te begrijpen, dat met

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

de sorteervolgorde van de index (status, sales DESC) overeenkomsten als logisch gevolg. Dus het gaat alles lezen kwalificatierijen, sorteer en kies de top 3.

Door status toe te voegen naar de ORDER BY u stelt de queryplanner in staat om de top 3 items rechtstreeks uit de index te lezen. Verwacht een versnelling van verschillende ordes van grootte .

Getest met PostgreSQL 8.4 en 9.1.



  1. Hoe de datumstijl in PostgreSQL te veranderen?

  2. batch vervangen in voor CodeIgniter Active Record

  3. Hoe element-ID in PHP-variabele te krijgen

  4. mysql kan de gebruiker geen rechten verlenen en krijgt een foutmelding:ERROR 1819 (HY000):uw wachtwoord voldoet niet aan de huidige beleidsvereisten