2 Ekim 2026 - 11:11
MySQL EXPLAIN ANALYZE ile Yavaş Sorgu Planı Nasıl Okunur? Görseli
Veritabanları

MySQL EXPLAIN ANALYZE ile Yavaş Sorgu Planı Nasıl Okunur?

Yorumlar

MySQL'de yavaş bir sorguya indeks eklemeden önce veritabanının sorguyu nasıl çalıştırdığını görmek gerekir. EXPLAIN tahmini planı gösterir; EXPLAIN ANALYZE ise sorguyu gerçekten çalıştırır ve her adım için ölçülen süre ile satır sayılarını ekler.

Üretimde önce normal EXPLAIN kullanın

SQL
EXPLAIN FORMAT=TREE
SELECT o.id, o.created_at
FROM orders AS o
WHERE o.customer_id = 42
ORDER BY o.created_at DESC
LIMIT 20;

EXPLAIN ANALYZE sorguyu yürüttüğü için pahalı veya veri değiştiren ifadelerde dikkatsizce kullanılmamalıdır. Önce kopya veri, staging veya düşük riskli bir SELECT üzerinde çalışın.

Tahmini ve gerçek satırları karşılaştırın

SQL
EXPLAIN ANALYZE
SELECT o.id, o.created_at
FROM orders AS o
WHERE o.customer_id = 42
ORDER BY o.created_at DESC
LIMIT 20;

Ağaç çıktısında her düğümde rows tahmini ile actual ... rows değerini karşılaştırın. Büyük farklar güncelliğini yitirmiş istatistikleri, ilişkili sütunları veya dağılımı eşit olmayan veriyi işaret edebilir.

actual time ve loops alanlarını birlikte okuyun

actual time=0.100..25.000 rows=20 loops=1 biçiminde ilk değer ilk satıra, ikinci değer tüm satırların tamamlanmasına kadar geçen ortalama süreyi gösterir. Bir düğüm binlerce kez çalışıyorsa küçük görünen süreyi loops sayısıyla birlikte değerlendirin.

Table scan her zaman hata değildir

Küçük tablonun tamamını okumak indeks erişiminden ucuz olabilir. Sorun, büyük tablonun çok sayıda satırını okuyup az sayıda satır döndürmesi veya filtrelemenin geç aşamada yapılmasıdır. Mevcut indeksleri kontrol edin:

SQL
SHOW INDEX FROM orders;
ANALYZE TABLE orders;

Örnekte (customer_id, created_at) birleşik indeksi filtreleme ve sıralamayı birlikte destekleyebilir; fakat gerçek sorgu yükü ve yazma maliyeti değerlendirilmeden eklenmemelidir.

Değişikliği aynı veriyle yeniden ölçün

İndeks veya sorgu değişikliğinden sonra planı tekrar alın. Hedef yalnızca “index scan” görmek değil; okunan satır, döngü ve toplam çalışma süresinin düşmesidir. Önbellek etkisini azaltmak için tek ölçüm yerine benzer koşullarda birkaç çalışma karşılaştırın.

Başvuru: MySQL 8.4 EXPLAIN kılavuzu.

Benzer Yazılar

Yorumlar ()

Henüz yorum yok. İlk yorum yapan sen ol!

Yorum Yap