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 .