Ketika data tabel transaksi atau user melonjak dari ribuan menjadi jutaan baris, query yang tadinya selesai dalam 5 milidetik tiba-tiba melonjak hingga 4 detik. Mayoritas kendala bukan pada spesifikasi hardware CPU/RAM, melainkan pada kebiasaan query scanning (Full Table Scan) yang tidak teroptimasi.
Memahami EXPLAIN ANALYZE
Sebelum menambahkan sembarang index, gunakan perintah EXPLAIN ANALYZE untuk melihat rencana eksekusi database:
EXPLAIN ANALYZE
SELECT id, customer_id, amount, status
FROM billing_invoices
WHERE status = "unpaid" AND due_date <= "2026-10-31"
ORDER BY due_date ASC LIMIT 50;
Strategi Composite Index (Leftmost Prefix Rule)
Jika query sering memfilter berdasarkan kombinasi kolom status dan tanggal, index satu kolom terpisah tidak akan optimal. Buat Composite Index dengan urutan selektivitas tertinggi di depan:
-- Pembuatan composite index yang efisien
CREATE INDEX idx_invoices_status_duedate
ON billing_invoices (status, due_date);