Untuk pengujian tujuan Anda dapat memaksa penggunaan indeks dengan "menonaktifkan" pemindaian berurutan - paling baik hanya di sesi Anda saat ini:
SET enable_seqscan = OFF;
Jangan jangan gunakan ini di server yang produktif. Detailnya ada di manual di sini.
Saya mengutip "penonaktifan", karena Anda sebenarnya tidak dapat menonaktifkan pemindaian tabel berurutan. Tetapi opsi lain yang tersedia sekarang lebih disukai untuk Postgres. Ini akan membuktikan bahwa indeks multicolumn pada (metric_id, t)
bisa digunakan - hanya tidak seefektif indeks pada kolom utama.
Anda mungkin mendapatkan hasil yang lebih baik dengan mengubah urutan kolom di PRIMARY KEY
(dan indeks yang digunakan untuk mengimplementasikannya di balik tirai dengannya) ke (t, metric_id)
. Atau buat tambahan indeks dengan kolom terbalik seperti itu.
- Apakah indeks komposit juga bagus untuk kueri di bidang pertama?
Anda biasanya tidak perlu memaksakan rencana kueri yang lebih baik dengan intervensi manual. Jika menyetel enable_seqscan = OFF
mengarah ke banyak rencana yang lebih baik, mungkin ada sesuatu yang tidak beres di database Anda. Pertimbangkan jawaban terkait ini:
- Jauhkan PostgreSQL dari terkadang memilih paket kueri yang buruk