Biaya pemeliharaan indeks (kolom tunggal atau multi-kolom) hampir selalu sebanding dengan peningkatan kinerja ketika indeks itu digunakan. Ini adalah kenaikan kecil pada setiap INSERT
/DELETE
, ditambah biaya jika mengubah nilai bidang yang diindeks melalui UPDATE
. (UPDATE
kasus ini jarang terjadi.) Jadi, jangan khawatir tentang biaya "mempertahankan indeks gabungan".
WHERE `vehicles`.`type` IN ('Car')
AND `vehicles`.`user_id` = 10
membutuhkan INDEX(user_id, type)
.
Pengoptimal akan
- temukan bahwa indeks itu adalah kandidat yang memungkinkan,
- periksa beberapa statistik, lalu
- gunakan indeks, atau tentukan kardinalitasnya buruk dan cukup pindai tabelnya.
Sertakan indeks; jangan khawatir tentang itu.
Saya memesan bidang seperti itu, bukan (type, user_id)
berdasarkan IN
. Anda , yang menyiratkan bahwa Anda terkadang memiliki beberapa nilai untuk type
.
Jika semua baris dalam tabel memiliki type = 'Car'
, tidak masalah. Semua yang saya katakan masih berlaku. Pemborosan memasukkan type
yang tidak perlu tidak signifikan.
Lebih baik memiliki semua "=" kolom terlebih dahulu dalam indeks, lalu paling banyak satu bidang lainnya. Diskusi lebih lanjut di sini .