🔴 İndeks & Görünümler
İndeks & Görünümler: Index'i kitabın arkasındaki dizin gibi düşün: 500 sayfayı baştan sona taramak yerine dizine bakar, 'checkout → sayfa 287' dersin.
Index'i kitabın arkasındaki dizin gibi düşün: 500 sayfayı baştan sona taramak yerine dizine bakar, 'checkout → sayfa 287' dersin. VIEW ise bambaşka bir şeydir — kitabın kendisine değil, sık okuduğun bölüme koyduğun bir **ayraç**tır: içeriği çoğaltmaz, sadece oraya ulaşmanın kısa yolunu saklar. Peki index bu kadar iyiyse, neden veritabanı her sütuna otomatik index koymuyor? Cevap bedelde: index okumayı hızlandırırken **yazmayı yavaşlatır**. Her INSERT/UPDATE, tablonun yanı sıra o tablodaki bütün index ağaçlarını da güncellemek zorundadır — kitaba yeni bir paragraf eklerken arkadaki dizini de elden geçirmek gibi. Beş index'li bir tabloya toplu veri yüklemek, index'sizine göre kat kat yavaştır. Bu yüzden index bir 'ne kadar çok o kadar iyi' ayarı değil, okuma/yazma dengesi kararıdır. Java'da bu takas tanıdıktır: `HashMap` aramada `ArrayList`'i açık ara döver, ama karşılığında bellek harcar ve her `put` için hash hesaplar. Index de aynı fikrin diskteki karşılığıdır — bedava hız yoktur, sadece yer değiştirmiş maliyet vardır. QA açısından iki somut yüzü var. Birincisi: test verisi hazırlarken 100 bin satır INSERT eden setup script'in beklenmedik biçimde dakikalarca sürüyorsa, şüpheleneceğin ilk şey hedef tablodaki index sayısıdır. İkincisi ve daha kritiği: performans testinde staging veritabanında olup production'da olmayan (ya da tersi) bir index, senin 'sorgu 40 ms' ölçümünü canlıda 4 saniyeye çevirir — yani test ortamıyla production'ın index şeması aynı değilse, ölçtüğün performans gerçek değildir. VIEW ise QA raporlarında tekrar eden o 6 tablolu JOIN'i tek isme indirip herkesin aynı tanımı kullanmasını sağlar; 'benim raporumda 12, seninkinde 9 bug çıkıyor' tartışmalarının çoğu farklı JOIN yazımından doğar.
Index'ler — Sorguları Hızlandırma
Micro Lab: SQL — Veri sorgulama
TODO satirini beklenen cozumdeki kritik satirla degistir. Bu gercek runtime degil; amac dogru yapinin yazilmasini kontrollu olarak pekistirmek.
SQL SELECT sorgusunun yurutme sirasi nedir?
FROM ile hangi tablodan veri cekecegini belirle
WHERE ile satrılari filtrele — calistirilacak ilk mantiksal adim
SELECT ile hangi sutunları gorecegini sec — * yerine acik sutun adi yaz
ORDER BY ile siralama sutununu ve yonunu (ASC/DESC) belirle
LIMIT ile donecek maksimum satir sayisini kisıtla
CREATE INDEX Aslında Diskte Ne İnşa Eder?
CREATE INDEX çalıştırıldığında…
CREATE INDEX çalıştırıldığında veritabanı o sütunun (örn. status) mevcut TÜM değerlerini okur ve ayrı, sıralı bir B-Tree yapısı diskte İNŞA eder — büyük tablolarda bu işlem saniyeler/dakikalar sürebilir.
İndeks oluşturulduktan SONRA…