MySQL Sorgu Optimizasyonu: EXPLAIN Analizi ve İndeksleme Mantığı
13.10.2026 | 7
MySQL Performansının Temeli: Sorgu Analizi
Bir yazılım mimarı olarak en sık karşılaştığım sorun, büyüyen veri setlerinde aniden yavaşlayan sorgulardır. Veritabanı optimizasyonu sadece 'daha fazla RAM' eklemek değil, veriye ulaşım yolunu kısaltmaktır. Bu süreçte en güçlü dostumuz EXPLAIN komutudur.
EXPLAIN ile Sorgu Planını Çözümlemek
Bir sorgunun neden yavaş çalıştığını anlamak için başına EXPLAIN eklemeniz yeterlidir. Bu komut, MySQL'in veriyi bulmak için hangi yolları izlediğini, hangi indeksleri kullandığını ve kaç satırı taradığını (rows) size raporlar.

Özellikle type kolonuna dikkat etmelisiniz. Eğer bu değer ALL ise, veritabanı tüm tabloyu tarıyor (Full Table Scan) demektir ki bu, performansın en büyük düşmanıdır.
İndeksleme Mantığı ve B-Tree Yapısı
İndeksler, veritabanı için bir kitabın içindekiler tablosu gibidir. Ancak her kolona indeks eklemek, yazma (INSERT/UPDATE) işlemlerini yavaşlatır. Doğru indeksleme stratejisi şunlardır:
- Kardinalitesi Yüksek Kolonlar: Benzersiz değer sayısı fazla olan (örneğin email, kullanıcı ID) kolonlara indeks atayın.
- Composite İndeksler: Birden fazla kolonda filtreleme yapıyorsanız, soldan sağa doğru (Leftmost Prefix kuralı) indeksleme yapın.
- Covering Index: Sorguda ihtiyaç duyduğunuz tüm kolonlar indekste mevcutsa, MySQL verinin kendisine gitmeden sadece indeksten okuma yapar.
-- İndeks kullanımı örneği
EXPLAIN SELECT * FROM orders WHERE user_id = 45 AND status = 'completed';
-- İyileştirme için composite index oluşturma
CREATE INDEX idx_user_status ON orders(user_id, status);Mimari İpucu: İndekslerinizi her zaman sorgu sıklığınıza göre optimize edin. Gereksiz indeksler sadece disk alanı kaplamakla kalmaz, veritabanı motorunun karar verme mekanizmasını da karmaşıklaştırır.