Dari penelitian saya sendiri (tetapi saya bukan ahli DBA) saya telah belajar bahwa ada dua hal yang perlu dipertimbangkan ketika memutuskan urutan indeks kunci majemuk.
Pertama, mengenai kardinalitas kolom, indeks umumnya lebih baik dalam mencari kolom dengan kardinalitas tinggi. Jadi saya akan cenderung untuk menempatkan kolom dengan kardinalitas tertinggi pertama dalam indeks. Untuk referensi, ada artikel berjudul Optimasi Permintaan MySQL yang mengatakan:
Dalam kasus Anda, _id
kolom jelas akan lebih cocok dengan definisi itu, sehingga mereka adalah kandidat yang lebih baik untuk menjadi awalan kunci.
Hal lain yang perlu dipertimbangkan adalah penggunaan kembali indeks ini. Sebagian besar (jika tidak semua) sistem basis data memungkinkan awalan kunci majemuk untuk digunakan kembali. Misalnya, kunci majemuk pada (owner_id, owner_type)
juga dapat digunakan oleh kueri di owner_id
tetapi tidak pada owner_type
.
Jadi dari apa yang Anda jelaskan dalam pertanyaan Anda, Anda mungkin lebih baik dengan dua indeks:indeks kunci majemuk pada (owner_id, owner_type)
dan satu lagi di (owner_type)
.
Akhirnya, semuanya bermuara pada kumpulan data dan kueri Anda. Cobalah beberapa skenario, tolok ukur menggunakan urutan kunci majemuk yang berbeda untuk melihat solusi apa yang paling optimal. Juga, jangan lupa bahwa indeks dikenakan penalti tulis di tabel Anda.
Perbarui :Ada juga pertanyaan SO lain yang agak populer tentang indeks kunci majemuk di sana:
Kapan saya harus menggunakan indeks komposit?