Index MySQL
Index MySQL adalah struktur yang membantu database menemukan baris tanpa memindai seluruh tabel. Tanpa index, query dengan kondisi pada kolom tertentu harus membaca setiap baris. Dengan index, database bisa melompat ke rentang yang relevan.
Kapan index membantu
Index paling berguna pada kolom yang sering dipakai di WHERE, JOIN, dan ORDER BY. Kolom dengan nilai unik seperti email atau slug biasanya cocok. Kolom dengan sedikit variasi seperti status aktif atau jenis kelamin biasanya tidak memberi manfaat besar, karena database tetap harus membaca banyak baris.
Index juga membantu foreign key dan query yang mencari rentang tanggal. Tetapi index tidak otomatis mempercepat semua query. Kalau query memakai fungsi pada kolom, misalnya WHERE YEAR(created_at) = 2026, index pada created_at bisa tidak dipakai. Ubah menjadi rentang tanggal agar index tetap efektif.
Composite index dan urutan kolom
Composite index mencakup beberapa kolom. Urutan kolom penting karena MySQL memakai prinsip leftmost prefix. Index pada (user_id, created_at) bisa dipakai untuk query yang memfilter user_id, atau user_id dan created_at. Index itu tidak bisa dipakai optimal untuk query yang hanya memfilter created_at.
Letakkan kolom dengan selektivitas tinggi lebih dulu, lalu kolom yang dipakai untuk pengurutan. Untuk query WHERE user_id = ? ORDER BY created_at DESC, index (user_id, created_at) sering lebih tepat daripada dua index terpisah.
Cara memeriksa
Gunakan EXPLAIN sebelum dan sesudah menambah index. Perhatikan kolom type, key, rows, dan Extra. Using filesort atau Using temporary bisa menjadi tanda bahwa index belum mendukung query. SHOW INDEX FROM nama_tabel; menampilkan index yang ada.
Aktifkan slow query log untuk menemukan query yang benar-benar lambat. Jangan menambah index hanya karena query terlihat rumit. Ukur waktu eksekusi dan jumlah baris yang diperiksa.
Yang perlu diperhatikan
Setiap index menambah biaya tulis. INSERT, UPDATE, dan DELETE harus memperbarui index, jadi terlalu banyak index bisa memperlambat aplikasi. Index juga memakai disk dan memori.
Index yang tidak pernah dipakai tetap membebani database. Audit secara berkala dan hapus index duplikat. Untuk konteks database, lihat MySQL, phpMyAdmin, Connection Pooling, dan NVMe SSD.
FAQ
Apakah semua kolom perlu index?
Tidak. Index pada kolom yang jarang difilter atau punya sedikit variasi jarang berguna. Fokus pada query yang lambat dan sering dijalankan.
Apa itu leftmost prefix?
MySQL memakai kolom paling kiri dari composite index lebih dulu. Index (a, b) bisa dipakai untuk filter a, tetapi tidak optimal untuk filter b saja.
Mengapa query masih lambat setelah diberi index?
Periksa apakah index benar-benar dipakai di EXPLAIN. Fungsi pada kolom, tipe data yang berbeda, atau urutan kolom yang salah bisa membuat index diabaikan.
Disclaimer: Artikel WikiHosting disusun untuk tujuan edukasi dan referensi. Teknologi hosting terus berkembang, sehingga beberapa informasi teknis mungkin berubah seiring waktu.
