Tanpa indeks, basis data membaca setiap baris untuk menjawab sebuah pertanyaan. Dengan indeks yang tepat, ia melompat langsung ke jawabannya. Pada tabel besar, bedanya antara hitungan detik dan mikrodetik — dan indeks yang keliru lebih buruk daripada tidak ada indeks sama sekali, sebab ia memakan biaya penulisan tanpa memberi apa pun.

Indekslah apa yang Anda SARING

Klausa WHERE, lalu ORDER BY, lalu kolom-kolom penggabungnya. Bukan apa yang Anda SELECT — bukan itu yang dipakai pencariannya.

SELECT * FROM orders WHERE customer_id = 42 ORDER BY created_at DESC;
CREATE INDEX idx_orders_customer_created ON orders (customer_id, created_at);

Pada indeks gabungan, urutan itu penting

Indeks gabungan bisa dipakai dari kiri ke kanan, seperti buku telepon yang diurutkan menurut nama keluarga lalu nama depan. Terurut begitu, Anda bisa menemukan semua orang bermarga Ali; Anda tidak bisa menemukan semua orang yang nama depannya Mohamed.

  • (customer_id, created_at) melayani saringan pada customer_id, dan pada keduanya sekaligus.
  • Ia TIDAK melayani saringan pada created_at saja.
  • Taruh kolom yang Anda saring secara persis di urutan pertama, dan rentang atau pengurutannya di urutan kedua.

Buktikan bahwa ia benar-benar dipakai

EXPLAIN SELECT * FROM orders WHERE customer_id = 42;

type: ref atau const berarti indeksnya dipakai. type: ALL berarti pemindaian penuh, dan indeksnya sedang diabaikan — biasanya karena kolomnya dibungkus di dalam sebuah fungsi.

WHERE DATE(created_at) = "2026-01-01" tidak bisa memakai indeks pada created_at: fungsinya harus dijalankan dulu pada tiap baris. Tulislah sebagai rentang saja: created_at >= "2026-01-01" AND created_at < "2026-01-02".

Mengapa jangan mengindeks segalanya

  • Setiap indeks diperbarui pada setiap INSERT, UPDATE dan DELETE. Sepuluh indeks membuat penulisan beberapa kali lipat lebih lambat.
  • Indeks memakan ruang cakram, kadang lebih besar daripada tabelnya sendiri.
  • Perencananya punya lebih banyak pilihan dan sesekali memilih yang lebih buruk.
Tambahkan indeks yang disebut oleh log kelambatan, ukurlah, lalu berhenti. Menambah indeks berdasarkan tebakan adalah cara sebuah basis data menjadi lebih lambat sambil tampak seperti sudah disetel.