🔴 İ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…