Perlu indeks pada kunci asing

30

Saya berjuang dengan indeks, kunci primer dan kunci asing ... Dan perlu memiliki semuanya.

Jika saya memiliki dua tabel, keduanya memiliki integer sebagai kunci utama.
Tabel pertama merujuk melalui FK ke kunci primer tabel kedua.

  • Di kedua tabel saya memiliki indeks kunci utama pada kolom ID
  • Saya membuat batasan FK pada table1.ref_fieldreferensi PK dari tabel kedua ( table2.id)
  • dan saya menambahkan indeks pada table1.ref_field

Apakah ini cara terbaik untuk mengatur indeks ini, kunci primer dan asing?

stUrb
sumber

Jawaban:

30

Desain Anda bagus. Jika Anda memiliki masalah kinerja (yang Anda tidak tahu pada waktu desain), Anda harus membuat indeks pada kolom table1.ref_field, dalam urutan yang sama (ASC) dengan kolom table2.id. Ini akan meningkatkan kinerja gabungan antara mereka ke tabel / kolom. Ada biaya tambahan untuk mempertahankan indeks apa pun, jadi Anda ingin menimbang biaya itu terhadap manfaat peningkatan kinerja.

PostgreSQL tidak secara otomatis membuat indeks pada kolom kunci asing yang mereferensikan kolom lain, jadi Anda harus melakukannya sendiri.

Berikut adalah pertanyaan StackOverflow pada topik yang sama:

Postgres dan Indeks pada Kunci Asing dan Kunci Utama

Berikut adalah kueri untuk membantu menentukan di mana Anda bisa mendapat manfaat dari menambahkan indeks seperti itu:

Postgresql: Indeks pada Kunci Asing

peterk411
sumber
Ini tidak selalu disayangkan - jika Anda tidak DELETEdari tabel yang direferensikan maka itu dapat menghemat banyak I / O dan CPU menghindari mempertahankan indeks yang tidak digunakan. Saya pikir itu harus dibuat secara default, hanya memiliki opsi untuk menekan pembuatannya.
Craig Ringer
Craig Ringer Tidak hanya DELETE dapat berdampak pada itu, jika Anda memilih dari bagian ke tabel anak, Anda akan memiliki masalah kinerja juga. Dokumentasi dari Oracle ini menjelaskan lebih lanjut: asktom.oracle.com/pls/asktom/…
777Anon