Apakah ada cara saya bisa mengetahui cara terbaik untuk mengetahui indeks mana yang akan dibuat untuk tabel?
WHERE
klausa.
Apakah ada cara saya bisa mengetahui cara terbaik untuk mengetahui indeks mana yang akan dibuat untuk tabel?
WHERE
klausa.
Jawaban:
Aturan praktis yang singkat. (Beberapa di antaranya dibuat secara otomatis, tetapi mungkin dapat dijatuhkan secara manual nanti, tergantung pada dbms Anda. Jangan menganggap Anda akan selalu bekerja pada PostgreSQL.)
Setiap kunci utama berarti bahwa kunci utama multi-kolom harus memiliki indeks tunggal yang mencakup semua kolom. PostgreSQL akan membuat indeks ini secara otomatis jika Anda mendeklarasikan kunci primer multi-kolom.
Ada banyak kasus di mana indeks multi-kolom tunggal memberi Anda kinerja yang lebih baik daripada beberapa indeks satu-kolom. Pantau pertanyaan yang lambat dan lakukan pengujian untuk mencari tahu yang mana.
Asumsikan bahwa setiap perubahan pada pengindeksan akan meningkatkan beberapa kegiatan basis data dan menurunkan yang lain. Saya merasa terbantu memiliki seperangkat pernyataan SQL yang dapat saya profil sebelum dan setelah membuat perubahan pada indeks. Set ini mencakup pernyataan SELECT, INSERT, UPDATE, dan DELETE.
Tidak ada pengganti untuk mempelajari dokumen untuk dbms khusus Anda.
Selain apa yang telah disediakan @Catcall , dan untuk menambahkan korektif kecil:
Saya juga membahas beberapa dasar dalam jawaban terkait erat pada SO baru-baru ini .
Jawaban sejauh ini tampaknya menunjukkan Anda perlu membuat indeks pada kunci utama, tetapi itu tidak terjadi di PostgreSQL (pengecualian parsial berlaku). Saya mengutip manualnya di sini :
PostgreSQL secara otomatis membuat indeks unik ketika batasan unik atau kunci utama didefinisikan untuk sebuah tabel. The Indeks mencakup kolom yang membentuk kunci utama atau kendala yang unik (indeks multicolumn, jika sesuai), dan mekanisme yang memberlakukan kendala.
Penekanan berani saya.
Anda mungkin ingin membuat indeks tambahan untuk kolom kedua atau lebih baru dari indeks multi-kolom, tetapi yang pertama umumnya tercakup dengan baik oleh indeks multicolumn - kecuali ketika kolom tambahan membuat indeks jauh lebih besar. Kami membahasnya dengan sangat terperinci di bawah pertanyaan terkait ini:
Apakah indeks komposit juga baik untuk kueri di bidang pertama?
Indeks multikolom , indeks parsial , dan indeks pada ekspresi adalah alat yang sangat kuat di PostgreSQL. Sejak PostgreSQL 9.2 ada juga hanya scan indeks , setara dengan "meliputi indeks" di RDBMS lainnya. Ini bukan tipe indeks lain, tetapi kemampuan baru RDBMS dengan tipe indeks yang ada.
Setiap indeks membawa biaya tertentu , sehingga tidak ada jalan lain di sekitar pengetahuan dasar untuk benar-benar mengoptimalkan pengindeksan. Hanya membuat lebih banyak indeks bisa lebih banyak ruginya daripada kebaikan. Secara khusus, indeks dapat mencegah pembaruan HOT dari meningkatkan kinerja.
Secara umum, operasi tulis ( DELETE
, UPDATE
) menjadi lebih mahal (tetapi mungkin juga bermanfaat!), Sedangkan operasi baca ( SELECT
) umumnya hanya menguntungkan. Terlalu banyak indeks dapat menghabiskan memori cache sehingga bahkan operasi membaca dapat menderita.
Akhirnya, halaman Postgres Wiki ini tentang alat fitur pemeliharaan indeks untuk menemukan indeks duplikat atau tidak terpakai (antara lain).
Ada dua opsi.
Jawaban untuk melakukannya sendiri cukup lengkap didokumentasikan di sini. Jadi mari kita lihat sesuatu yang lain.
Pghero mungkin dapat membantu Anda jika Anda menginginkan saran otomatis.
Yang mengatakan itu memiliki beberapa kekurangan.
WHERE
dan ORDER BY
, tidak JOINS
.Lihat video ini untuk informasi lebih lanjut .