
Pendahuluan
Bayangin lagi ngerjain fitur sederhana, tapi pas data di database udah nyentuh angka puluhan ribu, aplikasi tiba-tiba lemot banget pas narik data user. Seringkali kita nyalahin server atau framework-nya, padahal database-nya cuma lagi kebingungan nyari data di tumpukan 'kertas' yang berantakan karena nggak punya indeks.
Tips & Best Practices
- Di banyak project, biasanya saya mulai dari ngecek kolom mana yang paling sering masuk ke klausa WHERE. Kalau kamu sering filter berdasarkan
emailatauusername, itu kandidat utama buat dipasangin index. - Saat ngebangun relasi antar tabel, pastikan kolom foreign key selalu dapet index. Tanpa index di kolom ini, proses join antar tabel bakal makan resource CPU yang gila-gilaan pas datanya mulai membengkak.
- Kalau ada kolom yang isinya boolean atau status, jangan buru-buru kasih index. Saya belajar bahwa index di kolom dengan kardinalitas rendah (sedikit variasi nilai) malah sering bikin MySQL makin lambat karena overhead-nya lebih gede daripada manfaatnya.
Contoh Kode
Daripada ngandelin query mentah, di Laravel kita biasa pake migration buat nambahin index. Ini jauh lebih rapi karena ke-track di version control:
Schema::table('users', function (Blueprint $table) { $table->index('email'); $table->index(['first_name', 'last_name']); });Kenapa pakai index gabungan (composite)? Karena kalau aplikasi kamu sering nge-search pake kombinasi nama depan dan belakang, index gabungan bakal bikin pencarian jauh lebih instan dibanding index terpisah.
Variasi Implementasi
Ada dua pendekatan yang biasa saya ambil. Pertama, pakai unique() index kalau datanya memang harus unik, ini sekalian jadi validasi di level database. Kedua, pakai index() biasa buat kolom yang frekuensi bacanya tinggi tapi isinya bisa duplikat. Kalau datanya sangat besar dan sering dicari teksnya, saya biasanya beralih ke fulltext index, tapi ingat, performanya bakal beda jauh dibanding index standar.
Kesalahan Umum
- Over-indexing: Naruh index di semua kolom karena mikirnya 'biar cepet', padahal tiap index bikin proses INSERT dan UPDATE jadi berat.
- Lupa index di kolom yang dipakai buat ORDER BY, jadinya database harus ngelakuin 'filesort' yang bikin query nunggu lama.
- Salah urutan di composite index; inget, index itu kayak buku telepon, urutan kolom ngaruh banget ke performa.
- Mikir kalau
LIKE '%query%'bakal kena index, padahal wildcard di depan bikin index-nya gak kepake sama sekali. - Nggak pernah ngecek
EXPLAINquery. Banyak developer cuma nerka-nerka, padahalEXPLAINitu sakti banget buat ngeliat query kita pake index atau nggak.
Ringkasan
Intinya, indexing itu kayak bikin daftar isi buat database kamu. Jangan berlebihan, tapi jangan sampai absen di kolom vital. Setiap kali performa drop, coba balik lagi ke prinsip 'tahu apa yang dicari' dan pasang index di situ. Database yang enteng bakal bikin user kamu lebih betah pake aplikasi buatanmu.
Komentar
Posting Komentar