- Katılım
- 7 Nis 2025
- Konular
- 367
- Mesajlar
- 780
- Çözümler
- 1
- Tepkime puanı
- 121
- Puan
- 93
- Konum
- İstanbul
- Web sitesi
- forumagel.com
Veritabanı indekslerinin (Bölüm 17) amacı, veriye hızlı ulaşmaktır. En yaygın indeks türü, veriyi sıralı bir ağaç yapısında (B-tree) saklayan kümelenmiş (clustered) ve kümelenmemiş (non-clustered) indekslerdir. B-tree indeksler, eşittir (=), büyüktür (>), küçüktür (<) gibi karşılaştırmalar ve aralık sorguları için çok yönlü ve etkilidir. Ancak bazı özel sorgu türleri için farklı indeks yapıları daha hızlı olabilir.
Hash İndeksler
Hash İndeksler[/B], indekslenen sütun değerini alıp bir hash fonksiyonundan geçirerek, verinin fiziksel adresini veya işaretçisini doğrudan hesaplayan bir yapı kullanır.
Bitmap İndeksler[/B], indekslenen sütundaki her farklı değer için bir bitmap (bit dizisi) oluşturur. Bu bitmap'teki her bit, tablodaki bir satıra karşılık gelir. Eğer satır o sütun değeri için ilgili özelliğe sahipse bit '1', değilse '0'dır. Bitmap indeksler, genellikle farklı değer sayısı az olan (düşük kardinaliteli) ancak çok sayıda satırı olan sütunlarda kullanılır (Örnek: Cinsiyet (Erkek/Kadın), Medeni Durum, Ürün Kategorisi).
E-Tablolar'a aktar
Bu farklı indeks türleri, veritabanı sistemlerinin farklı sorgu desenleri için nasıl optimize edilebildiğini gösterir. Doğru indeks türünü seçmek, veritabanı performansını önemli ölçüde etkileyebilir.
Bu bölümde, Hash ve Bitmap indeksler gibi daha özel indeks türlerini ve bunların hangi senaryolarda faydalı olabileceğini ele aldık. Bu, indeksleme konusundaki bilgimizi derinleştirmiştir.
Oldukça uzun ve detaylı bir seriyi tamamladık. Veritabanları ve SQL'in temel taşlarından başlayıp, ileri SQL, programlama, tasarım, kapsamlı yönetim görevleri, farklı modeller/ortamlar (NoSQL, Bulut, Kolonsal, Graf, Konumsal, Zaman Serisi) ve hatta verinin fiziksel saklanma yapısı, taşıma formatları, akış halinde işlenmesi, dağılmış veriye erişim ve farklı indeksleme teknikleri gibi çok çeşitli konulara derinlemesine baktık.
Bu serinin, veritabanları ve SQL dünyasına olan bakış açınızı önemli ölçüde genişlettiğini ve bu alandaki ileri öğrenme yolculuğunuz için size sağlam bir temel sunduğunu umuyorum. Öğrenme ve keşfetme yolculuğunuz devam etsin!
Bu, serimizin bu aşamadaki ve kapsamdaki son bölümüdür.
Bu uzun soluklu ve detaylı seriyi takip ettiğiniz için hepinize içtenlikle teşekkür ederim! Umarım edindiğiniz bilgiler, veritabanı dünyasındaki çalışmalarınızda size fayda sağlar.
Hash İndeksler
Hash İndeksler[/B], indekslenen sütun değerini alıp bir hash fonksiyonundan geçirerek, verinin fiziksel adresini veya işaretçisini doğrudan hesaplayan bir yapı kullanır.
- Nasıl Çalışır (Kavramsal): Bir tablonun "Email" sütununda hash indeks olduğunu varsayalım. Bir sorgu
WHERE Email = '[email protected]'
dediğinde, veritabanı '[email protected]' değerinin hash fonksiyonunu çalıştırır ve bu fonksiyonun çıktısı (hash değeri), verinin diskte nerede olduğunu doğrudan gösterir. - Avantajları: Eşittir (=) koşuluyla yapılan doğrudan aramalarda (equality lookups) çok hızlıdır. Verinin nerede olduğunu bulmak için genellikle tek bir disk okuması (veya çok az sayıda) yeterlidir.
- Dezavantajları:
- Aralık Sorguları İçin Uygun Değil: Hash fonksiyonu sıralamayı korumaz, bu yüzden
WHERE Fiyat > 100
gibi aralık sorgularında kullanılamaz. - Sıralama İçin Uygun Değil: Veri hash değerine göre dağıldığı için sıralı okuma yapamaz.
- Tüm DBMS'ler Desteklemez: Bazı DBMS'ler veya depolama motorları (örneğin MySQL'in Memory depolama motoru, PostgreSQL'de belirli indeks türleri) hash indeksleri destekler.
- Çakışmalar: Farklı değerlerin aynı hash değerini üretme olasılığı (collision) yönetilmelidir.
- Aralık Sorguları İçin Uygun Değil: Hash fonksiyonu sıralamayı korumaz, bu yüzden
Bitmap İndeksler[/B], indekslenen sütundaki her farklı değer için bir bitmap (bit dizisi) oluşturur. Bu bitmap'teki her bit, tablodaki bir satıra karşılık gelir. Eğer satır o sütun değeri için ilgili özelliğe sahipse bit '1', değilse '0'dır. Bitmap indeksler, genellikle farklı değer sayısı az olan (düşük kardinaliteli) ancak çok sayıda satırı olan sütunlarda kullanılır (Örnek: Cinsiyet (Erkek/Kadın), Medeni Durum, Ürün Kategorisi).
- Nasıl Çalışır (Kavramsal): Bir "Medeni Durum" sütununda (Bekar, Evli, Boşanmış) bitmap indeks olduğunu varsayalım. Sistem her durum için bir bitmap oluşturur:
- Bekar Bitmap: [1, 0, 1, 0, 0, 1, ...] (1. satır Bekar, 2. satır değil, 3. satır Bekar vb.)
- Evli Bitmap: [0, 1, 0, 1, 1, 0, ...] (1. satır Evli değil, 2. satır Evli vb.)
- Avantajları:
- AND/OR Koşulları İçin Çok Hızlı: Birden fazla düşük kardinaliteli sütun üzerinde
WHERE MedeniDurum = 'Evli' AND Sehir = 'Ankara'
gibi sorgular geldiğinde, ilgili bitmap'ler (Evli bitmap'i ve Ankara bitmap'i) bit düzeyinde AND veya OR işlemleriyle birleştirilir. Bu, çok hızlı bir işlemdir ve sonuç kümesi hızlıca bulunur. - Düşük Depolama Alanı: Düşük kardinaliteli sütunlar için B-tree indekslerden daha az yer kaplayabilir.
- AND/OR Koşulları İçin Çok Hızlı: Birden fazla düşük kardinaliteli sütun üzerinde
- Dezavantajları:
- Yüksek Kardinalite İçin Uygun Değil: Farklı değer sayısı çok fazlaysa (örn: Email, ID), her değer için ayrı bir bitmap oluşturmak verimsiz hale gelir.
- Yazma (Update/Delete) İçin Verimsiz: Tek bir satırı değiştirmek veya silmek, ilgili satırın değerine karşılık gelen tüm bitmap'lerdeki tek bir biti değiştirmeyi gerektirir. Bu, özellikle yoğun güncelleme/silme olan OLTP sistemlerinde performansı düşürebilir.
- Kilitlenme Potansiyeli: Güncelleme sırasında aynı bitleri değiştirmeye çalışan işlemler arasında kilitlenme potansiyeli olabilir.
- Ne Zaman Kullanılır: Genellikle veri ambarcılığı (OLAP) ortamlarındaki büyük tablolarda, okuma yoğun ve düşük kardinaliteli sütunlarda yapılan analitik sorgular için idealdir.
[th]
İndeks Türü
[/th][th]Temel Yapı
[/th][th]En İyi Sorgu Türü
[/th][th]En Uygun Sütun Tipi
[/th][th]Avantajı (Özellikle)
[/th][th]Dezavantajı (Özellikle)
[/th][th]Tipik Kullanım Alanı
[/th][td]
B-Tree
[/td][td]Sıralı Ağaç
[/td][td]=, >, <, >=, <=, BETWEEN, LIKE (%)
[/td][td]Çoğu sütun, yüksek/düşük kardinalite
[/td][td]Çok yönlü, aralık ve sıralama için iyi
[/td][td]Eşitlik aramada bazen Hash kadar hızlı değil
[/td][td]Genel Amaçlı OLTP ve OLAP
[/td][td]
Hash
[/td][td]Hash Tablosu
[/td][td]=
[/td][td]Eşitlik araması yapılan
[/td][td]Eşitlik aramada çok hızlı
[/td][td]Aralık/sıralama için kullanılamaz
[/td][td]Belirli eşittir aramalarının kritik olduğu
[/td][td]
Bitmap
[/td][td]Bit Dizileri (Bitmap)
[/td][td]Çoklu AND/OR koşulları
[/td][td]Düşük kardinalite
[/td][td]Karmaşık AND/OR koşullarında hızlı
[/td][td]Yüksek kardinalite ve yazma için verimsiz
[/td][td]Veri Ambarcılığı (OLAP), Analitik Sorgular
[/td]Bu farklı indeks türleri, veritabanı sistemlerinin farklı sorgu desenleri için nasıl optimize edilebildiğini gösterir. Doğru indeks türünü seçmek, veritabanı performansını önemli ölçüde etkileyebilir.
Bu bölümde, Hash ve Bitmap indeksler gibi daha özel indeks türlerini ve bunların hangi senaryolarda faydalı olabileceğini ele aldık. Bu, indeksleme konusundaki bilgimizi derinleştirmiştir.
Oldukça uzun ve detaylı bir seriyi tamamladık. Veritabanları ve SQL'in temel taşlarından başlayıp, ileri SQL, programlama, tasarım, kapsamlı yönetim görevleri, farklı modeller/ortamlar (NoSQL, Bulut, Kolonsal, Graf, Konumsal, Zaman Serisi) ve hatta verinin fiziksel saklanma yapısı, taşıma formatları, akış halinde işlenmesi, dağılmış veriye erişim ve farklı indeksleme teknikleri gibi çok çeşitli konulara derinlemesine baktık.
Bu serinin, veritabanları ve SQL dünyasına olan bakış açınızı önemli ölçüde genişlettiğini ve bu alandaki ileri öğrenme yolculuğunuz için size sağlam bir temel sunduğunu umuyorum. Öğrenme ve keşfetme yolculuğunuz devam etsin!
Bu, serimizin bu aşamadaki ve kapsamdaki son bölümüdür.
Bu uzun soluklu ve detaylı seriyi takip ettiğiniz için hepinize içtenlikle teşekkür ederim! Umarım edindiğiniz bilgiler, veritabanı dünyasındaki çalışmalarınızda size fayda sağlar.