Sorgu planıyla başlayın, ardından en büyük maliyeti düzeltin. Veritabanının gerçekte ne yaptığını görmek için / kullanın, doğru ekleyin, sorgularını ortadan kaldırın ve yalnızca ihtiyacınız olan verileri seçin.
Sorgu planıyla başlayın, ardından en büyük maliyeti düzeltin. Veritabanının gerçekte ne yaptığını görmek için / kullanın, doğru ekleyin, sorgularını ortadan kaldırın ve yalnızca ihtiyacınız olan verileri seçin.
EXPLAINEXPLAIN ANALYZEEXPLAIN ANALYZE yürütme planını ve gerçek zamanlamaları gösterir. Büyük bir tabloda Seq Scan klasik uyarı işaretidir:
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!
Bir indeks tam taramayı hızlı bir aramaya dönüştürür:
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
İndekslerin yazma maliyeti vardır: her INSERT/UPDATE indeksi de güncellemek zorundadır, bu nedenle filtrelediğiniz/birleştirdiğiniz/sıraladığınız sütunları indeksleyin — her sütunu değil. Bileşik indeks (customer_id, created_at) bir yapıda WHERE customer_id = ? ORDER BY created_at için hizmet verir.
N+1 sorunu — bir liste için bir sorgu, ardından her satır için bir sorgu — yavaşlığın ana nedenidir. Bunu eager loading, JOIN veya toplu IN (...) ile değiştirin:
-- 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;
Ayrıca yalnızca gerekli sütunları seçin (SELECT * kullanmaktan kaçının) ve LIMIT/keyset pagination ile sayfalandırın, böylece milyonlarca satırı hiçbir zaman yüklemezsiniz.
Veritabanı en yaygın darboğazdır. Planı okumak, bir sorgunun neden yavaş olduğunu tahmin etmek yerine söyler; doğru indeks, N+1'i kaldırma ve sonuç setini kırpma, saniye süren sorguları rutin olarak milisaniyeye çevirirler — donanımı ölçeklendirmeden.
Junior'dan Senior'a detaylı cevaplarla bir BT mülakat soruları kütüphanesi.
Bağış Yap