Mulai dengan rencana kueri, kemudian perbaiki biaya terbesar. Gunakan / untuk melihat apa yang benar-benar dilakukan database, tambahkan yang tepat, hilangkan kueri , dan pilih hanya data yang Anda butuhkan.
Mulai dengan rencana kueri, kemudian perbaiki biaya terbesar. Gunakan / untuk melihat apa yang benar-benar dilakukan database, tambahkan yang tepat, hilangkan kueri , dan pilih hanya data yang Anda butuhkan.
EXPLAINEXPLAIN ANALYZEEXPLAIN ANALYZE menampilkan rencana eksekusi dan waktu sebenarnya. Seq Scan pada tabel besar adalah bendera merah klasik:
EXPLAIN ANALYZE
SELECT * FROM orders WHERE customer_id = 42;
-- Seq Scan on orders (cost=0.00..18500 rows=120)
-- Filter: (customer_id = 42)
-- rows removed by filter: 999880 ← scanned the whole table!
Index mengubah pemindaian penuh menjadi pencarian cepat:
CREATE INDEX idx_orders_customer ON orders (customer_id);
-- Now: Index Scan using idx_orders_customer (cost=0.42..8.5 rows=120)
-- 1,000,000-row scan → ~120-row lookup
Index memiliki biaya pada penulisan: setiap INSERT/UPDATE juga harus memperbarui index, jadi indexer kolom yang Anda filter/join/sort — bukan setiap kolom. Index komposit (customer_id, created_at) melayani WHERE customer_id = ? ORDER BY created_at dalam satu struktur.
Masalah N+1 — satu kueri untuk daftar, kemudian satu per baris — adalah penyebab utama kelambatan. Gantikan dengan eager loading, JOIN, atau IN (...) batch:
-- N+1: 1 + 100 queries
SELECT * FROM orders; -- then per order: SELECT * FROM users WHERE id = ?
-- Fixed: one JOIN, only needed columns
SELECT o.id, o.total, u.name
FROM orders o JOIN users u ON u.id = o.user_id;
Juga pilih hanya kolom yang diperlukan (hindari SELECT *) dan paginate dengan LIMIT/keyset pagination sehingga Anda tidak pernah memuat jutaan baris.
Database adalah bottleneck paling umum. Membaca rencana memberi tahu Anda mengapa kueri lambat daripada menebak; index yang tepat, menghilangkan N+1, dan memotong set hasil secara rutin mengubah kueri yang memakan waktu beberapa detik menjadi milidetik — tanpa menskalakan perangkat keras.