Kolom yang digunakan untuk pemfilteran atau bergabung (atau, pada tingkat yang lebih rendah, menyortir ) menarik untuk pengindeksan. Kolom yang baru saja dipilih hampir tidak relevan! Untuk kueri berikut, hanya indeks di a dan e semoga bermanfaat:
SELECT a,b,c,d
FROM tbl_a
WHERE a = $some_value
AND e < $other_value;
Di sini, f dan mungkin c adalah kandidat juga:
SELECT a,b,c,d
FROM tbl_a
JOIN tbl_b USING (f)
WHERE a = $some_value
AND e < $other_value
ORDER BY c;
Setelah membuat indeks, uji untuk melihat apakah indeks benar-benar berguna dengan EXPLAIN ANALYZE
. Juga bandingkan waktu eksekusi dengan dan tanpa indeks. Menghapus dan membuat ulang indeks cepat dan mudah. Ada juga parameter untuk eksperimen
dengan EXPLAIN ANALYZE
. Perbedaannya mungkin mengejutkan atau tidak ada sama sekali.
Karena tabel Anda hanya dapat dibaca, pemeliharaan indeks menjadi murah. Ini hanya masalah ruang disk.
Jika Anda benar-benar ingin tahu apa yang Anda lakukan, mulai dengan membaca dokumen .
Jika Anda tidak tahu kueri apa yang diharapkan ...
-
Coba log kueri yang cukup untuk menemukan kasus penggunaan umum. Buat log kueri dengan parameter
log_statement = all
untuk itu. Atau cukup catat kueri lambat menggunakanlog_min_duration_statement
. -
Buat indeks yang mungkin berguna dan periksa statistik setelah beberapa waktu untuk melihat apa yang sebenarnya digunakan. PostgreSQL memiliki seluruh infrastruktur untuk statistik pemantauan . Salah satu cara mudah untuk mempelajari statistik (dan banyak tugas lainnya) adalah pgAdmin di mana Anda dapat memilih tabel / fungsi / indeks Anda dan mendapatkan semua data pada tab "statistik" di browser objek (jendela utama).
-
Lanjutkan seperti yang dijelaskan di atas untuk melihat apakah indeks yang digunakan benar-benar mempercepat.
-
Jika perencana kueri harus memilih untuk menggunakan satu atau lebih indeks Anda tetapi tidak ada atau efek buruk, maka mungkin ada yang salah dengan penyiapan Anda dan Anda perlu mempelajari dasar-dasar pengoptimalan kinerja:vakum, analisis, parameter biaya, penggunaan memori, ...