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