Index mantığı, Clustered ve Non-Clustered Index nedir?
İlk olarak sql'de index mantığından biraz bahsedelim. Bildiğiniz gibi sql'de yazdığımız sorgulara göre bize sonuçlar döner fakat sql bu sonuçların geleceğini nereden biliyor gibi bir soru sorabilirsiniz. Indexleme mantığı örneğin bir emniyet şubesindeki dosyaların isme veya TC numarasına göre sıralanması veya kitaplardaki indeks mantığı ile aynıdır. Aşağıdaki örnekler ile daha net anlayacağınızı umuyorum.
Sql server'da 2 farkı indexleme yöntemi vardır.
- Clustered Index (kümelenmiş, sıralanmış)
- Non-Clustered Index (kümelenmemiş, sıralanmamış)
Clustered Index
Clustered kümelenmiş, sıralanmış anlamına gelir. Tıpkı auto increment numara verdiğiniz Id kolonu gibi işlem görür. Zaten sql'de auto increment ve primary key olarak belirlediğiniz kolon otomatik olarak clustered index olur. Yani bir tabloda sadece bir clustered index bulunur.
Peki bu sıralı indexin amacı nedir? Büyük veritabanı örneği olması açısından emniyet şubesinden temiz kağıdı almaya gittiğinizi düşünün. Tam adınızı söylediniz ve sizinle ilgilenen kişi ilgili dosyaların olduğu odaya gitti ve rafları tek tek kontrol ediyor. Çünkü dosyalar sıralı konulmamış ve hepsine tek tek bakması gerekiyor. Bulunması neredeyse imkansız. Halbuki isme göre sıralanmış olsalardı nereye bakması gerektiğini bilecek ve dosyanızı çok daha kısa zamanda bulacaktı. Sql'de clustered index mantığını bu şekilde kullanır.
SELECT AdSoyad FROM KISILER WHERE AdSoyad = 'Kadir Avcı'
Bu şekilde bir sorgu çalıştırdığınızda sql K harfi haricindeki tüm isimleri atlayıp ilgili sonuçları size görüntüleyecektir.
Clustered index, b-tree yani dengeli ağaç yapısına sahiptir ve veriler leaf denilen seviyelerde tutulur.
Non-Clustered IndexClustered index'in aksine veriler sıralı şekilde tutulmaz. Yine b-tree yapısındadır, verinin kendisi değil nerede olduğu (adresi) leaf seviyesinde tutulur. Buna en iyi örnekte bir kitaptır. Kitabın başında hangi sayfada hangi konu olduğu belirtilir. İncelemek veya aramak istediğiniz bir şeyi tüm sayfalara tek tek göz atmaktansa indeks sayesinde çok daha hızlı bir şekilde bulursunuz.
Tabloda birden fazla non-clustered index bulunabilir. Maksimum sayı sql server 2008'ten bu yana tüm sürümler için 999 olarak belirlenmiştir.