--- title: Index MySQL description: Struktur yang membuat query menemukan baris tanpa memindai seluruh tabel. Index salah bisa memperlambat tulis. canonical: https://penasihathosting.com/wikihosting/mysql-index type: wiki locale: id updated: 2026-10-29 author: Willya Randika --- # Index MySQL ## Overview - **Summary:** Struktur yang membuat query menemukan baris tanpa memindai seluruh tabel. Index salah bisa memperlambat tulis. - **Author:** Willya Randika ([profile](/penulis/willya-randika)) ## Article **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: ```sql 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`, dan `DELETE` harus memperbarui index. - **Jangan mengindeks semua kolom.** Pilih yang dipakai filter, join, dan urutan. - **Hindari fungsi pada kolom terindeks.** `WHERE YEAR(created_at) = 2026` sering 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 Tidak. Index yang tidak dipakai query hanya menambah biaya tulis dan ruang disk. Index dengan beberapa kolom, misalnya `(user_id, created_at)`. Urutan kolom menentukan query mana yang bisa memanfaatkannya. Bisa karena urutan kolom tidak cocok, fungsi diterapkan pada kolom, atau optimizer memilih full scan karena data terlalu kecil.