EXPLAIN, optimizer'ın seçtiği planı gösterir — her tabloya nasıl erişeceğini — sorguyu çalıştırmadan. Index'lerin kullanıldığını ve az sayıda satırın incelendiğini doğrulamak için okursunuz.
EXPLAIN, optimizer'ın seçtiği planı gösterir — her tabloya nasıl erişeceğini — sorguyu çalıştırmadan. Index'lerin kullanıldığını ve az sayıda satırın incelendiğini doğrulamak için okursunuz.
const / eq_ref / ref (index aramaları, iyi) → range → index (tam index taraması) → ALL (full table scan, tehlike işareti).NULL = hiçbiri).Using index (covering, harika), Using filesort / Using temporary (bellekte veya diskte sıralama/gruplama — genellikle optimize edilebilir).EXPLAIN SELECT * FROM orders WHERE customer_id = 42 ORDER BY created_at;
-- +------+------+------+---------+--------+----------------+
-- | type | key | rows | Extra |
-- | ALL | NULL | 900k | Using where; Using filesort | <- scans everything, sorts
-- +------+------+------+---------+--------+----------------+
-- Add an index that covers the filter AND the sort order:
CREATE INDEX idx_cust_created ON orders (customer_id, created_at);
EXPLAIN SELECT * FROM orders WHERE customer_id = 42 ORDER BY created_at;
-- | type | key | rows | Extra |
-- | ref | idx_cust_created | 30 | Using where | <- seeks 30 rows, no filesort
Index, 900 bin satırın ALL taramasını 30 satırlık bir ref aramasına dönüştürdü ve created_at ikinci sütun olduğu için satırlar önceden sıralı gelir — filesort kaybolur.
Tahminin yanlış olduğu durumları yakalayarak gerçek zamanlamayı ve satır sayılarını da görmek için EXPLAIN ANALYZE (MySQL 8) kullanın.
EXPLAIN, tahmini kanıtla değiştirme şeklinizdir. type: ALL, devasa bir rows veya Using filesort görmek, bir index'in tam olarak nerede eksik olduğunu söyler — "sayfa yavaş"tan hedeflenmiş bir düzeltmeye giden en hızlı yol.
Junior'dan Senior'a detaylı cevaplarla bir BT mülakat soruları kütüphanesi.
Bağış Yap