Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

pengurutan kunci yang berkinerja baik dalam indeks gabungan MySQL (asosiasi WRT Rails Polymorphic dan STI)

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?



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara menggabungkan dua tabel mysql?

  2. Escape string Python untuk MySQL

  3. DateTime::CreateFromFormat untuk PHP 5.2.14

  4. Masalah membungkus kepala di sekitar permintaan penghapusan SQL yang kompleks

  5. Bagaimana cara mengumpulkan Tanggal lahir dari formulir php dan memasukkan ke mysql?