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 .