Pertumbuhan tabel, filter bertingkat, dan permintaan data yang heterogen membuat query Laravel bisa melambat drastis. Kunci penanganannya adalah memetakan bottleneck dari slow query log, memeriksa rencana eksekusi dengan EXPLAIN, lalu memilih index partial yang menargetkan kondisi WHERE/ORDER utama.
Dokumen ini menunjukkan langkah-langkah praktis agar Anda bisa menerapkan optimasi tersebut secara tepat, memahami dampak terhadap pagination, dan tahu kapan harus pindah ke strategi skala besar seperti read replica atau denormalisasi.
Mengidentifikasi Query yang Membutuhkan Optimasi
Membaca slow query log
Aktifkan slow query log (MySQL/MariaDB: set slow_query_log=ON, PostgreSQL: log_min_duration_statement) lalu ambil entri yang berulang dan melebihi ambang waktu. Fokus pada query-filter yang dipanggil user interface filter bertingkat. Catat struktur WHERE/ORDER-nya agar dapat dibandingkan dengan index saat ini.
Analisis EXPLAIN
Jalankan EXPLAIN (atau EXPLAIN ANALYZE di PostgreSQL) untuk setiap query. Perhatikan kolom:
- type/rows: Apakah query melakukan full table scan?
- possible_keys/key: Index apa yang tersedia dan dipakai?
- Extra: Adakah Using filesort atau Using temporary?
Jika rencana menunjukkan Using where tanpa index atau scan semuanya, berarti index yang ada tidak memenuhi filter bertingkat Anda.
Menilai Kolom Filter Bertingkat untuk Index Partial
Tarik daftar kolom yang sering digunakan di WHERE, JOIN, ORDER BY, lalu urutkan berdasarkan frekuensi eksekusi. Filter bertingkat umumnya menggunakan kombinasi kolom dengan kondisi pasif tertentu (misal: status = 'active'). Di sinilah partial index berperan: hanya mengindeks subset baris yang paling sering dicari.
Contoh kondisi yang layak: status tetap, tenant_id yang relatif kecil, atau flag boolean. Jangan indeks semua kolom sekaligus karena akan membuat index berat dan memperlambat DML.
Gunakan SHOW INDEX FROM orders (MySQL) atau