PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Избор на правилния индекс за PostgreSQL заявка

Създайте частичен индекс с няколко колони с този конкретен ред на сортиране:

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

Променете леко заявката си:

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

Добавяне на status като първи елемент на ORDER BY клаузата изглежда излишна и безсмислена. Но опитайте.

Защо?

Планиращият заявки не е достатъчно умен, за да разбере това с

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

редът на сортиране на индекса (status, sales DESC) съвпадения като логично следствие. Така че ще прочете всички квалифициращи редове, сортирайте и изберете първите 3.

Чрез добавяне на status към ORDER BY вие разрешавате на програмата за планиране на заявки да чете директно първите 3 записа от индекса. Очаквайте ускоряване с няколко порядъка .

Тестван с PostgreSQL 8.4 и 9.1.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да запишете файл с изображение в база данни на Postgres?

  2. Как работи EXCEPT в PostgreSQL

  3. Postgres:ГРЕШКА:кешираният план не трябва да променя типа резултат

  4. Възможно ли е достъп до стара версия на ред в Postgres, която не е вакуумирана?

  5. Как потребителите могат да се харесват един на друг, като използват sequelize postgres nodejs?