Diwiti karo rencana kueri, banjur perbaiki biaya paling gedhe. Gunakake / kanggo ndeleng apa sing bener-bener ditaleni basis data, tambahaké sing tepat, ilangaké kueri , lan pilih mung data sing dibutuhake.
Diwiti karo rencana kueri, banjur perbaiki biaya paling gedhe. Gunakake / kanggo ndeleng apa sing bener-bener ditaleni basis data, tambahaké sing tepat, ilangaké kueri , lan pilih mung data sing dibutuhake.
EXPLAINEXPLAIN ANALYZEEXPLAIN ANALYZE nuduhake rencana eksekusi lan wektu nyata. A Seq Scan liwat tabel gedhe minangka tanda getun 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 ngowahi pemindaian lengkap dadi panggilan cepet:
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 nduweni biaya ing tulisan: saben INSERT/UPDATE kudu nganyari indeks, mula indeks kolom sing sampeyan saring/gabung/urut — ora saben kolom. Indeks komposit (customer_id, created_at) ngatur WHERE customer_id = ? ORDER BY created_at ing struktur siji.
Masalah N+1 — siji kueri kanggo dhaftar, banjur siji saben baris — minangka penyebab utama alon. Ganti karo eager loading, JOIN, utawa batched IN (...):
-- 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;
Ug milih mung kolom sing dibutuhake (singiri SELECT *) lan paginasi karo LIMIT/keyset pagination supaya sampeyan ora ngunggul yuta baris.
Basis data minangka kesingkatan paling umum. Maca rencana ngomong sampeyan kenapa kueri alon tinimbang ngrewang; indeks sing tepat, ngilangi N+1, lan nyingkat set asil rutin ngowahi kueri sekon-suwe dadi milidetik — tanpa skalang hardware.