Not : Özet bilgi içerir.
Veritabanı verilerin ilişkisel depolandığı alanlardır. Metin, tarih, sayısal değer, resim dosyası vb. farklı veri tipleri veritabanı üzerinde yer alabilir. Veritabanı Yönetim Sistemi (Database Management System DBMS) ise, veritabanlarının oluşturulması ve yönetilmesi için kullanılan sistemlerdir.
Klasik veritabanlarında veriler, B+ ağaçları (B+ tree) üzerinde saklanır. B+ ağaçları, verileri okumak için gerekli olan disk erişim sayısının en aza indirilmek için tercih edilir. B+ ağaçları:
- Dengeli ağaçlardır. Ağaç üzerindeki tüm yaprak düğümler aynı seviyededir.
- Her düğümde birden fazla değer saklanır.
- Tüm değerler, ağacın yaprak düğümleri arasında mutlaka bulunur.
B+ ağacının yaprak düğümleri, bağlantılı liste (linked list) şeklindedir ve tüm değerler yaprak düğümler üzerinde sıralı bir şekilde saklanır.
Örnek bir B+ ağacı aşağıda verilmiştir. (Bu ağaç adresinde yer alan animasyon kullanılarak oluşturulmuştur.)
B+ ağacı üzerinde hangi değerlerin hangi sıra ile tutulacağını, tablolar üzerinde tanımlanmış olan index yapıları belirler.
Clustered Index
Tablo verisinin tutulduğu B+ ağacıdır. Dolayısıyla, bir tablo için sadece bir adet clustered index bulunabilir. Tüm tablo verisi, B+ ağacının yaprak (leaf) düğümleri üzerinde sıralı bir şekilde tutulur. Verilerin sırasını tablo üzerindeki Primery Key belirler.
Tablo üzerinde belirli bir ID
değerine sahip satırın verileri getirilmek isteniyorsa, ilk olarak ağaç üzerinden bu ID
değerine sahip yaprak düğüm bulunur. B+ ağacı yaprak düğümü üzerinde ise, tablonun o satırına ait verinin disk üzerinde hangi alanda bulundu bilgisi yer alır. Bu yüzden belirli bir ID değerine sahip satıra erişimek için (SELECT * FROM [TABLO_ADI] WHERE ID=5)
, { Ağaç üzerinden ID değerinin saklandığı yaprak düğümü bul => Yaprak düğüm içeriğini diskten oku => Satır verilerini diskten oku } yolu izlenir.
Nonclustered Index
Clustered index dışında, tablo üzerindeki veriye erişim için farklı indeksler tanımlanabilir. Tablo üzerinde seçilen bir ya da birkaç sütun üzerinden nonclustered index oluşturulabilir. Seçilen sütunların aldığı tüm değerler, yine B+ ağacı üzerinde tutulur. B+ aşağı disk üzerinde saklanır.
Ağacın yaprak düğümlerinde, düğümde yer alan değerlere karşılık gelen primary key değerleri ve bu değerlerin clustered index üzerinde nerede tutulduklarına ait işaretçiler yer alır. Örneğin, [OGRENCI]
tablosunda, öğrencinin yer aldığı [SINIF]
sütunu üzerinden bir nonclustered index oluşturulmak istediğinde, B+ aşağı üzerinde tüm sınıf değerleri yer alır. Bu ağacın yaprak düğümlerinde ise, yaprak düğümde yer alan sınıfa ait öğrencilerin ID
değerleri ve bu ID
değerlerinin ağacın clustered indeksi üzerinde nerede bulunduğu bilgisi (pointer, disk üzerindeki adresi) yer alır. Pointer ile, öğrencilerin diğer bilgilerine ihtiyaç duyulduğunda, her ID
için clustered index üzerinden yeniden bir arama yapma ihtiyacı ortadan kalkar.
Modern veritabanı yönetim sistemleri, nonclustered indeks yaprak düğümlerinde, primary key dışında, tablo satırına ait farklı sütun değerlerinin de saklanmasına imkan verir. Bu durum disk üzerinde saklanan nonclustered index boyutunun büyünesine sebep olacaktır.
Her nonclustered indeks veritabanı boyutunu büyüteceği ve insert/update/delete maliyetlerini artıracağı için, index tanımlama konusunda dikkatli olmak gerekmektedir.
Heap
Primary Key değeri, dolayısıyla clustered indekse sahip olmayan tablo verilerini disk üzerinde saklamak için kullanılan bir yapıdır. Özellikle satır sayısı çok az olan tablolar dışında tercih edilmemelidir.