Index gabungan di MySQL: urutan kolom itu penting
Pahami kenapa urutan kolom pada composite index memengaruhi query mana yang terbantu.
Satu indeks untuk beberapa kolom
Composite index adalah indeks yang dibuat dari lebih dari satu kolom. MySQL menyusun indeks ini berdasarkan kolom pertama, lalu kolom kedua di dalam kelompok kolom pertama, dan seterusnya.
CREATE INDEX idx_pesanan_status_tanggal
ON pesanan (status, dibuat_pada);
Aturan prefiks kiri
Indeks gabungan bisa dipakai untuk query yang menyaring berdasarkan prefiks kolom dari kiri.
-- Memakai indeks: menyaring status, lalu terurut oleh dibuat_pada
SELECT * FROM pesanan
WHERE status = 'selesai'
ORDER BY dibuat_pada DESC;
-- Tidak memakai indeks di atas secara efektif
SELECT * FROM pesanan
WHERE dibuat_pada > '2026-01-01';
Query kedua hanya menyaring berdasarkan dibuat_pada tanpa menyertakan status, sehingga tidak bisa memanfaatkan prefiks kiri dari indeks tersebut.
Menentukan urutan kolom
Umumnya, letakkan kolom dengan kesetaraan (=) di depan, dan kolom untuk rentang atau pengurutan (>, <, ORDER BY) di belakang. Kolom dengan jumlah nilai unik tinggi juga biasanya lebih efektif diletakkan lebih dulu.
Memeriksa indeks yang benar-benar dipakai
EXPLAIN SELECT * FROM pesanan
WHERE status = 'selesai'
ORDER BY dibuat_pada DESC;
Kolom key pada hasil EXPLAIN menunjukkan indeks yang benar-benar dipilih optimizer, sementara possible_keys hanya menunjukkan kandidat yang tersedia.
Latihan
Buat dua indeks dengan urutan kolom terbalik pada tabel yang sama, lalu bandingkan hasil EXPLAIN untuk dua query yang berbeda pola penyaringannya.
