Index: Rahasia Query Cepat di Tabel Besar

Memahami cara kerja index seperti daftar isi buku, membuat index tunggal, unik, dan gabungan, membaca EXPLAIN, serta kapan index justru merugikan.

Part 32 dari 38 ± 45 menit Gratis

Cerita: mencari satu nama di buku telepon

Ada buku telepon setebal 5.000 halaman. Kalau namanya tidak diurutkan, kamu harus membuka halaman satu per satu dari awal: lambat. Karena diurutkan abjad, kamu bisa melompat langsung ke huruf yang tepat. Index di database bekerja persis begitu.

Tanpa index, query WHERE pelanggan_id = 5 di tabel berisi 10 juta pesanan harus memeriksa setiap baris (full table scan). Dengan index pada kolom itu, MySQL melompat langsung ke baris yang dicari, dari jutaan langkah menjadi beberapa langkah saja.

Membuat index

-- index biasa: mempercepat pencarian
CREATE INDEX idx_pesanan_pelanggan ON pesanan (pelanggan_id);

-- index UNIQUE: mempercepat sekaligus melarang nilai kembar
CREATE UNIQUE INDEX uq_pelanggan_email ON pelanggan (email);

-- index gabungan: untuk query yang memakai dua kolom bersamaan
CREATE INDEX idx_produk_kategori_harga ON produk (kategori_id, harga);

-- melihat index
SHOW INDEX FROM pesanan;

-- menghapus index
DROP INDEX idx_pesanan_pelanggan ON pesanan;

PRIMARY KEY dan UNIQUE otomatis punya index. FOREIGN KEY di MySQL (InnoDB) juga otomatis dibuatkan index pada kolomnya.

Membuktikan dengan EXPLAIN

Tulis EXPLAIN di depan SELECT untuk melihat rencana eksekusi tanpa menjalankannya:

EXPLAIN SELECT * FROM pesanan WHERE pelanggan_id = 5;

tanpa index:  type = ALL     rows = 1.000.000   ← memeriksa semua baris
dengan index: type = ref     rows = 4           ← langsung ke baris yang tepat
              key  = idx_pesanan_pelanggan

Cari kolom type: ALL = pemindaian penuh (biasanya buruk di tabel besar); ref/range/const = memakai index (bagus). Kolom key menunjukkan index yang dipilih.

Aturan index gabungan: urutan kolom penting

Index (kategori_id, harga) seperti buku telepon yang diurutkan berdasarkan kota, lalu nama. Bisa dipakai untuk: WHERE kategori_id = 1 dan WHERE kategori_id = 1 AND harga > 15000. Tapi tidak efektif untuk WHERE harga > 15000 saja (kolom pertama dilewati). Ini disebut aturan leftmost prefix.

Index itu bukan gratis

KeuntunganHarga yang dibayar
SELECT/WHERE/JOIN/ORDER BY lebih cepatINSERT, UPDATE, DELETE lebih lambat (index ikut diperbarui)
Menjamin keunikan (UNIQUE)Memakan ruang disk tambahan

Bukan "semakin banyak index semakin bagus". Pasang index untuk kolom yang sering dipakai di WHERE, JOIN ... ON, dan ORDER BY. Jangan untuk kolom yang jarang dicari atau punya sedikit variasi nilai (misalnya kolom jenis kelamin yang hanya berisi dua nilai), dan hindari menumpuk puluhan index pada satu tabel.

Kebiasaan yang mematikan index

  • Membungkus kolom dengan fungsi: WHERE YEAR(tanggal) = 2024 → ganti dengan rentang tanggal >= '2024-01-01' AND tanggal < '2025-01-01'.
  • Pola LIKE berawalan wildcard: LIKE '%kopi' tidak bisa memakai index; LIKE 'kopi%' bisa.
  • Membandingkan tipe berbeda: kolom teks dibandingkan dengan angka tanpa kutip.

Praktikkan langsung, gratis

Tulis dan jalankan kode langsung di browser, dapatkan penilaian otomatis. Daftar gratis kapan saja untuk menyimpan progres dan meraih sertifikat.

Coba latihan sekarang, tanpa daftar
Bagikan: WhatsApp Facebook LinkedIn X