SQL LIFE

Index nedir? Clustered Index ve NonCluestered Index Farkları Nelerdir?

sql server index nedir, sql server clustered index nedir, sql server index mantığı, sql server index yapısı


Index

Index’ler tablolar veya view’lar üzerinde oluşturulan ve verilere daha az veri okuyarak daha hızlı erişmeyi sağlayan SQL objeleridir. Index tabloda veya view da, bir veya daha fazla kolonun oluşturduğu anahtarlardır. Belli bir yapıda depolanan bu anahtarlar, SQL sisteminin satırı veya satırla ilişkili anahtar değerleri hızlı ve etkili şekilde bulunmasını sağlar. Örnek olarak SQL Serverda index’ler B Tree olarak depolanır. Balanced Tree veriler aramasını hızlandırmak için kullanılan dengeli bir ağaç yapısıdır.
 

2 tipte index bulunmaktadır.  Clustered Index ve Non-clustred Index
 
Heap Table Kavramı ve Veri Erişim Çeşitleri
SQL Server’da veriler bir tabloya kayıt edilirken aksi belirtilmedikçe veriler sıralı olarak dişte tutulmazlar. Sırasız bir şekilde tutulan bu tarz tablolara Heap Table denir. Heap tabloya yeni kayıt eklendiğinde veri herhangi bir sıraya göre değil rastgele data page’lere yazılır. Heap table üzerinde herhangi bir kayır arandığında tablonun tüm kayıtlarına sırayla erişip, aranan kayıtla karşılaştırır.
Fakat kaydı bulsa bile başka kayıtlar da olabilme ihtimalinden dolayı son kaydına kadar tüm kayıtlarla karşılaştırma işlemi yapar. Bu şekilde erişim modeline Full Table Scan denir. Milyonlarca kaydın bulunduğu tabloda verileri bu şekilde aramak çok maliyetli olacaktır.
sql index heap table sqllife

 

Bu noktada arama işleminde SQL sisteminin kullanabileceği bir index varsa çok daha hızlı bir şekilde sonuç alınır.


Clustered Index
Cluster index sahip olduğu anahtara göre veri satırlarını sıralar ve depolar.
Kısaca bir tablodaki verilerin fiziksel olarak nasıl sıralanacağını belirtir. Bu nedenle clustered index’lere çoğu zaman fiziksel index de denmektedir. Her tabloda sadece bir clustered index olabilir. Çünkü veri satırı sadece bir sırayla saklanabilir. Eğer bir tablo clustered index’e sahipse o tablo clustered tablodur.

clustered index sqllife serkan ezgim çelik
 

Non-Clustered Index

Non-clustered index’ler ise verileri fiziksel değil mantıksal olarak sıralı bir şekilde tutarlar. Yani non-clustered indexlerin leaf’lerinde clustered index’ten farklı olarak veriler değil verilerin nerede olduğuna ilişkin bilgiler yer almaktadır.

Nonclustered index oluşturulurken index’leme için kullanılacak olan kolonlar yani Key kolonlara ait veriler B-Tree veri yapısındaki Leaf ve Non Leaf Nod’larda saklanırlar. Eğer erişmek istediğimiz veri bu key kolonları içeriyorsa veriye direkt erişiriz fakat
bu key kolonların dışında bir seçeneğe erişmek istersek öncelikle tablo üzerinde bu koşula uyan verilerin anahtar değeri belirlenir ve daha sonra bu anahtar değer üzerinde index tanımında olmayan kolonların değerlerine erişilir. Bu işleme Key Lookup denir.
Unique ve Composite,Filtered gibi NonClustered Index çeşitleri bulunmaktadır.

heap based nonclustered index structure sqllife

Clustered Index VS Nonclustered Index

Özetle, clustered indeksle satırlar diskte fiziksel olarak aynı sırada tutulur. Bu yüzden tabloda sadece bir clustered index bulunur.
Nonclustered index ile fiziksel satırlara adres gösteren gösteren pointerların bulunduğu ikinci bir liste vardır. Birden fazla nonlustered index bulunabilir fakat bu durum yeni kayıtların yazılmasını daha da yavaşlatacaktır. O yüzden kullanımında dikkatli olunmalıdır.
Eğer bütün kolonları istiyorsanız, genel olarak clustered index daha hızlı çalışır çünkü önce index’e sonra da tabloya gitmezsiniz.
Eğer verileri tekrardan düzenlemek durumunda kalırsanız, Clustered Index ile tabloya yazmak daha yavaş olabilir.

#
Ezgim Çelik
They didn't know it was impossible, so they did it - Mark Twain


Etiketler