Menurut Craig Ringer :
Meskipun biasanya merupakan ide yang baik untuk membuat indeks pada (atau termasuk) kolom kunci asing di sisi referensi Anda, itu tidak diperlukan. Setiap indeks yang Anda tambahkan memperlambat operasi DML sedikit, sehingga Anda membayar biaya kinerja pada setiap
INSERT
,UPDATE
atauDELETE
. Jika indeks jarang digunakan, mungkin tidak layak dimiliki.
Bagaimana Anda menentukan apakah manfaat dari penambahan indeks melebihi biayanya?
Apakah Anda melakukan tes unit profil sebelum / setelah menambahkan indeks dan memeriksa untuk kenaikan kinerja keseluruhan? Atau ada cara yang lebih baik?
pg_stat_user_indexes
membantu memandu Anda dengan ini, menunjukkan informasi tentang penggunaan indeks. Untuk memperkirakan biaya perawatan Anda dapat melihat aktivitas menulis tabel Andapg_stat_user_tables
tetapi karena HOT, tidak semua pembaruan harus menyentuh indeks sehingga Anda mungkin melebih-lebihkan sedikit.Jawaban:
Penggunaan indeks tergantung pada struktur data Anda dan selektivitas data Anda. Jika Anda membuat pertanyaan yang tidak Anda gunakan, itu mahal. Jika Anda menggunakannya secara efektif, mereka adalah alat yang hebat. Ada perencana kueri dan analitik perencana kueri (
EXPLAIN
) hanya perencanaan atau perencanaan dan pelaksanaan perintah (EXPLAIN ANALYZE
).Dan ada buku online yang bagus: gunakan indeks luke tentang rekomendasi penggunaan indeks
sumber
Pilih aturan praktis dan ikuti mereka. Misalnya, saya selalu membuat indeks di sisi referensi kunci asing.
Pastikan Anda menguji kinerja produk Anda terhadap kriteria kinerja berdasarkan kebutuhan pengguna. Misalnya, sistem perlu menangani beban masuk 100 permintaan POST tipe X per menit.
Jika Anda tidak dapat memenuhi persyaratan kinerja Anda maka perbaiki model Anda, mungkin melanggar aturan praktis Anda dalam proses itu.
sumber