Mulai dengan rencana kueri, kemudian perbaiki kos terbesar. Gunakan / untuk melihat apa yang benar-benar dilakukan oleh pangkalan data, tambahkan yang tepat, hilangkan kueri , dan pilih hanya data yang diperlukan.
Mulai dengan rencana kueri, kemudian perbaiki kos terbesar. Gunakan / untuk melihat apa yang benar-benar dilakukan oleh pangkalan data, tambahkan yang tepat, hilangkan kueri , dan pilih hanya data yang diperlukan.
EXPLAINEXPLAIN ANALYZEEXPLAIN ANALYZE menunjukkan rencana eksekusi dan waktu sebenarnya. Seq Scan atas 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!
Indeks 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
Indeks memiliki biaya pada penulisan: setiap INSERT/UPDATE juga harus memperbarui indeks, jadi indeks kolom yang anda filter/gabung/sortir — bukan setiap kolom. Indeks 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.
Pangkalan data adalah bottleneck paling umum. Membaca rencana memberi tahu anda mengapa kueri lambat daripada menebak; indeks yang tepat, menghilangkan N+1, dan memangkas hasil set secara rutin mengubah kueri yang berlangsung berapa detik menjadi milidetik — tanpa penskalaan perangkat keras.
Pustaka soalan temu duga IT dengan jawapan terperinci — daripada Junior hingga Senior.
Derma