A

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

  1. Jalankan EXPLAIN ANALYZE sebelum optimasi buta
  2. Index kolom filter + join + sort
  3. Eager loading untuk relasi
  4. Batasi SELECT *
  5. Monitor slow query log

Penutup

Optimasi database adalah proses iteratif. Ukur dulu, perbaiki, ukur lagi. Jangan tebak-tebakan.

Artikel terkait