Teknoloji ipuçlarını kendin uygula
İçerik
Son yazılar
Biz kimiz
Yazılım Atölyesi, adım adım teknoloji rehberleriyle kendi başına öğrenip uygulama yapmak isteyenlere yardımcı olur. Pratik ipuçları, araç önerileri ve çözümler bulacaksınız.

SQL Veri Tabanı Optimizasyon İpuçları

Yavaş bir sayfanın arkasında genellikle tek bir suçlu vardır: kötü yazılmış ya da index'siz bir sorgu. Sunucuya RAM eklemek bunu birkaç ay erteler, çözmez. sql sorgu optimizasyonu ise tahmine değil ölçüme dayandığı için kalıcı sonuç verir. Aşağıdaki adımları kendi veritabanında sırayla uygulayabilirsin; hepsi için gereken tek şey bir SQL istemcisi ve biraz sabır.

Not: örnekler MySQL/PostgreSQL ağırlıklı. Komut adları değişse de mantık her ilişkisel veritabanında aynıdır.

1. Yavaş Sorguyu Bul ve Ne Yaptığını Anla

Optimizasyona sorgu yazarak başlamak yaygın bir hata. Önce hangi sorgunun gerçekten yavaş olduğunu bilmen gerekir. Çoğu projede toplam sürenin büyük kısmını bir avuç sorgu yer.

Ölçmeden başlama: yavaş sorgu kaydı

Bu ölçüm alışkanlığı tarayıcı tarafındaki profil çıkarma mantığıyla aynıdır; JavaScript performans notlarında da önce ölç, sonra dokun kuralı geçerli.

EXPLAIN çıktısını okumayı öğren

Sorgunun önüne EXPLAIN yazınca veritabanının planını görürsün. EXPLAIN ANALYZE ise sorguyu gerçekten çalıştırıp ölçer. Şunlara bak:

Gördüğün şeyAnlamıYapılacak
Full table scan / Seq ScanTüm tablo satır satır okunuyorWHERE kolonuna index düşün
Beklenen satır ≫ dönen satırGereksiz satır okunuyorFiltreyi daraltmak veya daha iyi index
Filesort / SortSıralama bellekte/diskte yapılıyorORDER BY kolonunu index'e ekle
Nested loop + büyük tabloJOIN her satır için tekrar arıyorJOIN kolonunda index olmalı
Tahmin ile gerçek satır çok farklıİstatistikler eskiANALYZE / tablo istatistiğini yenile

Gerçek boyutta veriyle test et

2. Index Kur, Sorguyu Yeniden Yaz

Elinde suçlu sorgu ve planı varken düzeltme kısmı şaşırtıcı derecede mekanik hale gelir.

Doğru index'i, doğru sırayla

  1. WHERE, JOIN ve ORDER BY'da geçen kolonları listele.
  2. Eşitlik filtrelerini başa, aralık filtrelerini (>, <, BETWEEN) sona koy. Bileşik index'te sıra her şeydir.
  3. (kullanici_id, olusturma_tarihi) index'i, tek başına kullanici_id aramasında da çalışır. Tersi çalışmaz. Yani soldan başlayan önek kuralını unutma.
  4. Sorgunun ihtiyaç duyduğu tüm kolonlar index'te varsa veritabanı tabloya hiç gitmez. Buna kapsayan (covering) index denir; en büyük kazançlar buradan gelir.
  5. Her kolona index atma. Her index yazma işlemini yavaşlatır ve disk yer. Kullanılmayan index'leri düzenli olarak tespit edip sil.

Index'i işe yaramaz hale getiren yazımlar

JOIN, sayfalama ve N+1