Örnek sorular
IndexingZorluk 1
Depolama seviyesinde bir veritabanı index'i nedir?
- aTüm tablonun, ayrı bir disk biriminde tutulan sıkıştırılmış, salt-okunur bir kopyasıdır
- bEn son çalıştırılan sorguların sonucunu tutan bir bellek-içi (in-memory) cache'tir
- cKolon değerlerini, onları içeren satırlara eşleyen ayrı ve sıralı bir yapıdır✓
- dTablonun kendi fiziksel yerleşimini periyodik olarak yeniden düzenleyen bir arka plan işidir
Açıklama:Index, anahtar değerleri sıralı tutan ve her birini o değeri içeren satır(lar)a işaret eden yardımcı bir veri yapısıdır (genelde B-tree); böylece motor tüm tabloyu okumadan eşleşmeleri bulur. Tablonun tam kopyası (a) değildir; sorgu sonucu cache'i (b) ise farklı bir mekanizmadır.
IndexingZorluk 1
products.sku kolonunda index yok. Motor WHERE sku = 'X-100' sorgusunu nasıl karşılar?
- aFull (sequential) scan yapar; her satırı okuyup koşulu test eder✓
- bKolonda index oluşturulana kadar sorguyu çalıştırmayı reddeder
- cYalnızca eşleşen ilk satırı okuyup hemen durur, tablonun geri kalanını yok sayar
- d
sku üzerinde otomatik geçici bir index kurup onu kalıcı olarak yeniden kullanır
Açıklama:Kullanılabilir bir index olmadığında motorun kısayolu yoktur; tabloyu satır satır tarar (sequential/full table scan) ve eşleşenleri tutar. Sessizce kalıcı bir index oluşturmaz (d); ayrıca başka satırlar da eşleşebileceği için ilk eşleşmede duramaz (c).
IndexingZorluk 1
Genelde hangi kolonlar index için en iyi adaylardır?
- aSorgularda neredeyse hiç kullanılmayan ama tesadüfen az yer kaplayan kolonlar
- bYalnızca detay ekranlarında gösterilen büyük metin veya binary blob kolonları
- cNeredeyse her yazmada güncellenen ama neredeyse hiç okunmayan kolonlar
- dWHERE filtreleri, JOIN koşulları veya ORDER BY'da sık kullanılan kolonlar✓
Açıklama:Index, motorun bir kolona göre tekrar tekrar arama/eşleştirme/sıralama yaptığı yerlerde — yani WHERE, JOIN ve ORDER BY'da — işe yarar. Nadiren sorgulanan kolonu index'lemek (a) yer ve yazma zamanı israf eder; sürekli güncellenip nadiren okunan kolonu index'lemek (c) az okuma faydasına karşılık bakım maliyeti ekler.
IndexingZorluk 1
id üzerinde PRIMARY KEY tanımlıyorsun. Veritabanı bunu desteklemek için ne oluşturur?
- aFazladan bir şey yok; primary key her insert'te tablo tam taranarak zorlanır
- bAnahtar kolonunda otomatik kullanılan, hem zorlayan hem arama yapan bir unique index✓
- cKolonu dahili bir sistem katalog tablosuna işaret eden bir foreign key
- dHer insert'ten önce çalışıp tekrar eden id değerlerini kontrol eden bir trigger
Açıklama:Primary key tanımlamak arkada otomatik bir unique index oluşturur; motor bunu hem uniqueness'ı zorlamak hem de id ile satırı hızlı bulmak için kullanır. Her insert'te tabloyu yeniden taramaz (a) — index zaten bunu önler — ve görünür bir trigger (d) devreye girmez.
IndexingZorluk 1
Tek bir B-tree index hem age = 30 hem age BETWEEN 20 AND 40 sorgusuna nasıl hizmet edebilir?
- aAnahtarları sıralı tuttuğu için; hem eşitlik hem aralık üzerinde seek yapılabilir✓
- bKolondaki her farklı değer için ayrı bir hash bucket tuttuğu için
- cPredicate'i değerlendirmeden önce index'li kolonun tamamını belleğe yüklediği için
- dAralık sorguları içeride bir eşitlik kontrolleri listesine yeniden yazıldığı için
Açıklama:B-tree anahtarları sıralı tutar; motor bir başlangıç noktasına inip yaprakları sırayla gezebilir — bu hem tam eşleşmeyi hem de bitişik aralıkları kapsar. Hash yapısı (b) eşitliği destekler ama aralığı desteklemez; bu yüzden aralık predicate'leri hash index kullanamaz.
IndexingZorluk 1
Optimizer'ın kullanmaya karar verdiği bir index ekliyorsun. Sorguda ne değişebilir?
- aDönen satır kümesi kayabilir, çünkü index bazı eşleşmeleri eleyip çıkarır
- bSUM ve COUNT gibi aggregate sonuçları biraz farklı çıkabilir
- cORDER BY olmadan bile satırlar garanti olarak index'in sırasında döner
- dSadece performans değişir; sonuç kümesi birebir aynı kalır✓
Açıklama:Index bir arama yardımcısıdır, sorgunun mantığının parçası değil; bu yüzden yalnızca cevabın ne kadar hızlı üretileceğini etkiler, hangi satır/değerlerin döndüğünü değil (a ve b). Açık ORDER BY olmadan sıralama asla garanti değildir (c), index tesadüfen sıralı döndürse bile.