SQL Veritabanı Optimizasyonu

Veritabanı optimizasyonu, sorguların daha az kaynak tüketerek daha kısa sürede sonuç döndürmesini sağlama sürecidir. Veri miktarı arttıkça (Big Data), optimize edilmemiş sorgular sistemin tamamen kilitlenmesine neden olabilir.

Performansın Kalbi: İndeksleme (Indexing)

İndeksler, bir kitabın "İçindekiler" bölümü gibidir. Veritabanı motorunun tüm tabloyu satır satır taramak (Table Scan) yerine, verinin yerini doğrudan bulmasını sağlar.

1) Sorgu Yazarken Dikkat Edilmesi Gerekenler

Küçük değişiklikler, milyonlarca satırlık tablolarda saniyeler kazandırabilir:

A) SELECT * Kullanımından Kaçının

İhtiyacınız olmayan sütunları çekmek, hem bellek hem de ağ trafiği için gereksiz yüktür.

Kötü: SELECT * FROM Urunler
İyi: SELECT UrunAdi, Fiyat FROM Urunler

B) Wildcard (%) Kullanımına Dikkat

LIKE '%kelime' şeklinde başlayan sorgular indeksleri geçersiz kılar ve performansı düşürür.

2) Profesyonel Optimizasyon Teknikleri

Teknik Açıklama
Execution Plan Sorgunun nasıl çalıştığını analiz edin. Hangi adımın yavaş olduğunu gösterir.
Normalization Veri tekrarını önleyerek veritabanı bütünlüğünü koruyun.
N+1 Sorunu Döngü içinde sorgu çalıştırmayın. JOIN kullanarak tek seferde veriyi alın.
Data Types En küçük veri tipini seçin (Örn: Sadece 0-255 arası sayı için tinyint kullanın).

Kod Örneği: JOIN Optimizasyonu

İki tabloyu birleştirirken filtrelemeyi doğru yerde yapmak performansı artırır.

Optimized SQL Query
-- Kötü Uygulama: Tüm veriyi çekip sonra filtrelemek
SELECT * FROM Siparisler s
JOIN Kullanicilar k ON s.KullaniciId = k.Id
WHERE k.Sehir = 'Ankara';

-- İyi Uygulama: Filtrelenmiş bir alt küme ile birleştirmek
SELECT s.SiparisNo, k.AdSoyad 
FROM Siparisler s
INNER JOIN (SELECT Id, AdSoyad FROM Kullanicilar WHERE Sehir = 'Ankara') k 
ON s.KullaniciId = k.Id;
💡 Uzman Tavsiyesi: Sık kullanılan sorgularda WHERE, JOIN ve ORDER BY alanlarına mutlaka Index atayın. Ancak gereksiz her indeksin yazma (Insert/Update) hızını yavaşlatacağını unutmayın.

Özet

  • Veritabanı profil araçlarını (Profiler) kullanın.
  • Sık güncellenen tablolarda aşırı indekslemeden kaçının.
  • Büyük verilerde "Paging" (Sayfalama) kullanarak veriyi parçalar halinde çekin.