Optimasi Query PostgreSQL untuk Aplikasi Laravel
Panduan praktis mengoptimalkan query PostgreSQL pada aplikasi Laravel: EXPLAIN, index, N+1, dan pola query yang sering terlewat.
1 menit bacaAhmad Apandi
Pendahuluan
Query yang lambat adalah salah satu penyebab utama aplikasi enterprise terasa “berat”. Artikel ini merangkum checklist optimasi PostgreSQL yang saya gunakan di proyek pemerintahan dan pendidikan.
Mulai dari EXPLAIN ANALYZE
EXPLAIN (ANALYZE, BUFFERS)
SELECT * FROM orders
WHERE status = 'paid'
AND created_at >= NOW() - INTERVAL '30 days';
Perhatikan:
- Seq Scan pada tabel besar → kandidat index
- Rows estimasi vs aktual yang jauh beda → statistik out-of-date
- Buffers hit/read → indikasi I/O
Index yang tepat
CREATE INDEX CONCURRENTLY idx_orders_status_created
ON orders (status, created_at DESC);
Gunakan CONCURRENTLY di produksi agar tidak mengunci tabel terlalu lama.
Hindari N+1 di Eloquent
// Buruk
$users = User::all();
foreach ($users as $user) {
echo $user->profile->bio;
}
// Baik
$users = User::with('profile')->get();
Partial index untuk data hot
CREATE INDEX idx_orders_open
ON orders (created_at)
WHERE status IN ('pending', 'processing');
Checklist cepat
- Jalankan
EXPLAIN ANALYZEsebelum optimasi buta - Index kolom filter + join + sort
- Eager loading untuk relasi
- Batasi
SELECT * - Monitor slow query log
Penutup
Optimasi database adalah proses iteratif. Ukur dulu, perbaiki, ukur lagi. Jangan tebak-tebakan.