PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Memilih indeks yang tepat untuk kueri PostgreSQL

Buat indeks multikolom parsial dengan urutan pengurutan khusus ini:

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

Ubah kueri Anda sedikit:

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

Menambahkan status sebagai elemen pertama dari ORDER BY klausa tampaknya berlebihan dan tidak ada gunanya. Tapi cobalah.

Mengapa?

Perencana kueri tidak cukup pintar untuk memahami bahwa dengan

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

urutan pengurutan indeks (status, sales DESC) cocok sebagai konsekuensi logis. Jadi itu akan membaca semua baris yang memenuhi syarat, urutkan dan pilih 3 teratas.

Dengan menambahkan status ke ORDER BY Anda mengaktifkan perencana kueri untuk membaca 3 entri teratas dari indeks secara langsung. Harapkan percepatan sebesar beberapa kali lipat .

Diuji dengan PostgreSQL 8.4 dan 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. menghubungkan postgresql dan codeigniter

  2. EXECUTE...INTO...USING pernyataan di PL/pgSQL tidak dapat mengeksekusi ke dalam catatan?

  3. Kembalikan kumpulan kolom dinamis

  4. Bagaimana cara mengubah posisi kolom dalam tabel database PostgreSQL?

  5. Tidak dapat menyalin tabel ke database lain dengan pg_dump