Neler yeni

Foruma hoş geldin 👋, Ziyaretçi

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.

  • Merhaba Değerli Ziyaretçimiz, ForumaGel ailesi seni bekliyor! 🌟 Aramıza katılarak güçlü ve samimi topluluğumuzun bir parçası olabilirsin. Burada her üye değerli, her katkı kıymetli. Şimdi üye ol, bizimle birlikte gelişmenin ve keyifli sohbetlerin tadını çıkar! Sevgi ve Saygılarla, ForumaGel Yönetimi ❤️
Yan Yana Banner
Yan Yana Banner
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.
  • 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.
Bitmap İndeksler
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.
  • 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.
Özet ve Karşılaştırma[/B]
[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]​
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.

 

Şu an konuyu görüntüleyenler

Tema özelleştirme sistemi

Bu menüden forum temasının bazı alanlarını kendinize özel olarak düzenleye bilirsiniz

Zevkini yansıtan rengi seç

Geniş / Dar görünüm

Temanızı geniş yada dar olarak kullanmak için kullanabileceğiniz bir yapıyı kontrolünü sağlayabilirsiniz.

Izgara görünümlü forum listesi

Forum listesindeki düzeni ızgara yada sıradan listeleme tarzındaki yapının kontrolünü sağlayabilirsiniz.

Resimli ızgara modu

Izgara forum listesinde resimleri açıp/kapatabileceğiniz yapının kontrolünü sağlayabilirsiniz.

Kenar çubuğunu kapat

Kenar çubuğunu kapatarak forumdaki kalabalık görünümde kurtulabilirsiniz.

Sabit kenar çubuğu

Kenar çubuğunu sabitleyerek daha kullanışlı ve erişiminizi kolaylaştırabilirsiniz.

Köşe kıvrımlarını kapat

Blokların köşelerinde bulunan kıvrımları kapatıp/açarak zevkinize göre kullanabilirsiniz.

Geri