SQL'de indeks nedir? Yavaş sorguyu EXPLAIN ile bulup hızlandırmak

Editör 6 saat önce · 0 görüntülenme

Veritabanındaki tablo büyüdükçe birkaç milisaniyede dönen sorgular saniyeler sürmeye başlayabilir. Bunun en yaygın nedeni doğru indeksin olmamasıdır.

İndeks nedir?

İndeks, bir kitabın sonundaki dizine benzer. Dizin yoksa bir kelimeyi bulmak için tüm sayfaları okumak gerekir; veritabanında buna tam tablo taraması (full table scan) denir. İndeks olduğunda veritabanı aradığı satırlara doğrudan gider.

CREATE INDEX idx_siparis_musteri ON siparis (musteri_id);

EXPLAIN ile sorguyu incelemek

Bir sorgunun nasıl çalıştırılacağını görmek için başına EXPLAIN ekle:

EXPLAIN SELECT * FROM siparis WHERE musteri_id = 42;

MySQL/MariaDB'de dikkat edilecek sütunlar:

  • type: ALL tam tablo taraması demektir, büyük tablolarda kötü işarettir. ref, range, const iyidir.
  • key: Kullanılan indeks. NULL ise indeks kullanılmıyor.
  • rows: Taranacak tahmini satır sayısı.

PostgreSQL'de EXPLAIN ANALYZE sorguyu gerçekten çalıştırıp süreleri de gösterir; "Seq Scan" ifadesi tam tablo taramasıdır.

Hangi sütunlara indeks konmalı?

  • WHERE koşullarında sık kullanılan sütunlar
  • JOIN yapılan yabancı anahtar sütunları
  • ORDER BY ile sıralanan sütunlar

Bileşik indeks ve sıra

WHERE durum = 'aktif' AND olusturma > '2026-01-01' gibi sorgular için iki sütunlu indeks tek tek indekslerden daha etkilidir:

CREATE INDEX idx_durum_tarih ON siparis (durum, olusturma);

Sıra önemlidir: Bu indeks yalnızca durum ile yapılan aramada da kullanılır, ama yalnızca olusturma ile yapılan aramada genellikle kullanılmaz. Eşitlik koşulundaki sütunu öne, aralık koşulundakini arkaya koy.

İndeksi işe yaramaz hale getiren durumlar

  • Sütuna fonksiyon uygulamak: WHERE YEAR(olusturma) = 2026 yerine WHERE olusturma >= '2026-01-01' AND olusturma < '2027-01-01' yaz.
  • Başında joker olan LIKE: LIKE '%ahmet' indeks kullanamaz, LIKE 'ahmet%' kullanabilir.
  • Tip uyuşmazlığı: Metin sütununu sayıyla karşılaştırmak.

Her şeye indeks koymak çözüm değil

Her indeks ekleme, güncelleme ve silme işlemlerini biraz yavaşlatır ve disk kaplar. Gerçekten kullanılan sorgulara göre indeks ekle.

Yavaş çalışan bir sorgun varsa sorguyu, tablo yapısını (SHOW CREATE TABLE) ve EXPLAIN çıktısını bu konunun altına ekleyebilirsin. Paylaşmadan önce gerçek müşteri verilerini çıkarmayı unutma.

0

0 cevap

Henüz cevap yok. İlk cevabı sen yaz.

Cevap yaz

Cevap yazmak için giriş yapmalısın.

Konu bilgisi

  • Açılış12.11.2026
  • Son etkinlik6 saat önce
  • Cevap0
  • Görüntülenme0
  • Beğeni0
Yeni konu aç