Index mantığı, Clustered ve Non-Clustered Index nedir?

09 Kasım 2015 2 dk okuma süresi 189 okunma

İ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.

sql index, b-tree
sql index, b-tree

Non-Clustered Index

Clustered 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.


Yazılarıma abone olmak ister misiniz?
Spam yapılmaz, sadece bildirim amaçlıdır. İstediğiniz zaman abonelikten çıkabilirsiniz.
İlginizi çekebilecek diğer yazılar.
OSX üzerinde Docker ile Sql Server yüklemek ve yönetmek

Redis nedir, kullanım yerleri, avantaj ve dezavantajları nedir? Populerliği her geçen gün artan redis, in-memory tabanlı key-value mantığı ile çalışan ve yüksek performans sağlayan açık kaynak nosql veritabanıdır.

Mssql kullanan herkes en az bir kere kullanmıştır fakat aradaki farkı pek sorgulamazlar. Bu yazıda stored procedure ile function arasındaki farkların neler olduğunu öğrenebilirsiniz.