Saya memiliki tabel dengan indeks multikolom, dan saya ragu tentang penyortiran indeks yang tepat untuk mendapatkan kinerja maksimum pada kueri.
Skenario:
PostgreSQL 8.4, tabel dengan sekitar satu juta baris
Nilai dalam kolom c1 dapat memiliki sekitar 100 nilai yang berbeda . Kita dapat mengasumsikan nilainya terdistribusi secara merata, jadi kami memiliki sekitar 10.000 baris untuk setiap nilai yang mungkin.
Kolom c2 dapat memiliki 1000 nilai yang berbeda . Kami memiliki 1000 baris untuk setiap nilai yang memungkinkan.
Saat mencari data, kondisi selalu menyertakan nilai untuk dua kolom ini, sehingga tabel memiliki indeks multikolom yang menggabungkan c1 dan c2. Saya telah membaca tentang pentingnya memesan kolom dengan benar dalam indeks multikolom jika Anda memiliki pertanyaan menggunakan hanya satu kolom untuk memfilter. Ini tidak terjadi dalam skenario kami.
Pertanyaan saya adalah yang ini:
Mengingat fakta bahwa salah satu filter memilih set data yang jauh lebih kecil, dapatkah saya meningkatkan kinerja jika indeks pertama adalah yang paling selektif (yang memungkinkan set lebih kecil)? Saya tidak pernah mempertimbangkan pertanyaan ini sampai saya melihat gambar dari artikel yang direferensikan:
Gambar diambil dari artikel yang direferensikan tentang indeks multikolom .
Kueri menggunakan nilai dari dua kolom untuk memfilter. Saya tidak memiliki pertanyaan menggunakan hanya satu kolom untuk memfilter. Semua dari mereka adalah: WHERE c1=@ParameterA AND c2=@ParameterB
. Ada juga kondisi seperti ini:WHERE c1 = "abc" AND c2 LIKE "ab%"