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

Apa yang harus diindeks pada kueri dengan banyak kolom dalam klausa WHERE

Anda harus mencari tahu apa WHERE klausa yang akan Anda gunakan dengan kueri ini, seberapa sering setiap kondisi akan muncul dan seberapa selektif setiap kondisi.

  • Jangan mengindeks kueri yang jarang terjadi kecuali Anda harus melakukannya.

  • Gunakan indeks multikolom, dimulai dengan kolom-kolom yang akan muncul di = perbandingan.

  • Mengenai urutan kolom dalam indeks multicolumn, mulailah dengan kolom-kolom yang akan digunakan dalam kueri sendiri (indeks dapat digunakan untuk kueri dengan hanya beberapa kolomnya, asalkan kolom tersebut berada di awal indeks).

  • Anda dapat menghilangkan kolom dengan selektivitas rendah, seperti gender .

Misalnya, dengan kueri Anda di atas, jika semuanya sering dan semua kolom selektif, indeks ini akan bagus:

... ON apartments (city_id, rooms, size)

... ON apartments (area_id, ad_type, price)

... ON apartments (area_id, ad_type, published_at)

Indeks ini juga dapat digunakan untuk WHERE klausa dengan hanya area_id atau city_id di dalamnya.

Memiliki terlalu banyak indeks adalah hal yang buruk.

Jika metode di atas akan menyebabkan terlalu banyak indeks, mis. karena pengguna dapat memilih kolom arbitrer untuk WHERE klausa, lebih baik untuk mengindeks kolom individu atau kadang-kadang pasangan kolom yang secara teratur berjalan bersama.

Dengan begitu PostgreSQL dapat memilih pemindaian indeks bitmap untuk menggabungkan beberapa indeks untuk satu kueri. Itu kurang efisien dibandingkan pemindaian indeks biasa , tetapi biasanya lebih baik daripada pemindaian berurutan .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Gabungan kueri array JSONB di Postgres?

  2. postgres hanya menggunakan indeks yang diurutkan untuk menanyakan tabel catatan 5m

  3. Mendapatkan hampir dua kali lipat panjangnya saat membaca byte[] dari postgres dengan jpa

  4. Memilih semua Record jika Record memiliki salah satu ID dari Array

  5. psql:FATAL:peran gelandangan tidak ada