Index MySQL
Index MySQL adalah struktur data (umumnya B-tree) yang memungkinkan database menemukan baris tanpa memindai seluruh tabel. Tanpa index, query dengan WHERE atau JOIN bisa berubah dari milidetik menjadi detik saat data tumbuh.
Kapan index membantu
| Query | Index yang relevan |
|---|---|
WHERE email = ? | Index pada email |
WHERE status = ? ORDER BY created_at | Composite (status, created_at) |
JOIN orders ON orders.user_id = users.id | Index pada orders.user_id |
WHERE slug = ? | Unique index pada slug |
Composite index dan urutan kolom
Index (status, created_at) bisa dipakai untuk filter status saja, atau status + urutan created_at. Tetapi tidak untuk created_at saja. Urutan kolom mengikuti cara query Anda, bukan sekadar daftar kolom.
Cara memeriksa
Gunakan EXPLAIN sebelum dan sesudah menambah index:
EXPLAIN SELECT * FROM orders WHERE user_id = 42 ORDER BY created_at DESC;
Perhatikan kolom type, key, dan rows. ALL berarti full scan; ref atau range biasanya lebih baik.
Yang perlu diperhatikan
- Index memperlambat tulis. Setiap
INSERT,UPDATE, danDELETEharus memperbarui index. - Jangan mengindeks semua kolom. Pilih yang dipakai filter, join, dan urutan.
- Hindari fungsi pada kolom terindeks.
WHERE YEAR(created_at) = 2026sering tidak memakai index. - Cardinality rendah kurang efektif. Kolom dengan sedikit nilai unik jarang berguna sendirian.
- Backup sebelum mengubah schema. Uji di staging, lalu ukur query setelah perubahan.
Untuk WordPress, tabel wp_postmeta dan wp_options sering menjadi sumber query lambat. Periksa query dari plugin sebelum menambah index, karena index yang salah bisa memperlambat checkout dan admin. Ukur dengan query monitor, lalu bandingkan sebelum dan sesudah perubahan.
FAQ
Apakah semua kolom perlu index?
Tidak. Index yang tidak dipakai query hanya menambah biaya tulis dan ruang disk.
Apa itu composite index?
Index dengan beberapa kolom, misalnya (user_id, created_at). Urutan kolom menentukan query mana yang bisa memanfaatkannya.
Mengapa query masih lambat setelah diberi index?
Bisa karena urutan kolom tidak cocok, fungsi diterapkan pada kolom, atau optimizer memilih full scan karena data terlalu kecil.
Disclaimer: Artikel WikiHosting disusun untuk tujuan edukasi dan referensi. Teknologi hosting terus berkembang, sehingga beberapa informasi teknis mungkin berubah seiring waktu.
