Recraftory

Index dan Query Optimization

Teknik mempercepat query database dengan index dan optimasi

Apa itu Index

  • Struktur data yang mempercepat pencarian dalam tabel
  • Mirip dengan indeks di buku untuk mencari halaman cepat
  • Tanpa index, database harus memeriksa setiap baris satu per satu

Cara Kerja Index

  • Index menyimpan salinan kolom yang diindeks dalam urutan terurut
  • Database bisa mencari dengan binary search atau struktur tree
  • Hasilnya: query jadi jauh lebih cepat untuk tabel besar

Jenis-Jenis Index

Single Column Index

  • Index pada satu kolom saja
  • Cocok untuk kolom yang sering dicari atau disaring
  • Contoh: CREATE INDEX idx_email ON users(email)

Composite Index

  • Index pada beberapa kolom sekaligus
  • Urutan kolom penting: gunakan kolom yang paling selektif di depan
  • Contoh: CREATE INDEX idx_name_age ON users(nama, usia)

Unique Index

  • Menjamin nilai di kolom tidak boleh duplikat
  • Sering digunakan bersama primary key
  • Contoh: CREATE UNIQUE INDEX idx_email ON users(email)

Kapan Menggunakan Index

  • Kolom yang sering digunakan di klausa WHERE
  • Kolom yang sering diurutkan dengan ORDER BY
  • Kolom yang digunakan dalam JOIN antar tabel
  • Kolom dengan selectivity tinggi, nilainya bervariasi banyak

Kapan Tidak Menggunakan Index

  • Tabel dengan sedikit data, index tidak membantu banyak
  • Kolom yang sering diubah, karena index juga perlu diupdate
  • Kolom dengan nilai yang hampir semua sama, seperti status aktif/tidak aktif
  • Kolom yang jarang digunakan dalam pencarian

Query Optimization

SELECT Hanya Kolom yang Diperlukan

  • Hindari SELECT *, sebutkan kolom spesifik yang dibutuhkan
  • Mengurangi data yang ditransfer dari database ke aplikasi

Gunakan EXPLAIN

  • Perintah untuk melihat rencana eksekusi query
  • Membantu menemukan query yang lambat dan butuh index
  • Contoh: EXPLAIN SELECT * FROM users WHERE email = 'test@email.com'

Hindari N+1 Query Problem

  • Jangan jalankan query dalam loop
  • Gunakan JOIN atau eager loading untuk mengambil data sekaligus

Gunakan LIMIT untuk Data Besar

  • Jangan ambil ribuan baris sekaligus jika tidak perlu
  • Implementasikan pagination di aplikasi

Transaksi

  • Sekumpulan query yang harus berhasil semua atau gagal semua
  • Memastikan konsistensi data, terutama untuk operasi finansial
  • Contoh: transfer uang harus mengurangi saldo pengirim dan menambah saldo penerima secara bersamaan

ACID Properties

  • Atomicity: semua query berhasil atau tidak ada yang berhasil
  • Consistency: data tetap valid sebelum dan sesudah transaksi
  • Isolation: transaksi tidak mengganggu transaksi lain
  • Durability: hasil transaksi tersimpan permanen meski ada kegagalan sistem