SQL Server: İndex Yapısı ve Çeşitleri(Clustered, Nonclustered)

-Clustered(Kümelenmiş) İndeks: Kümelenmiş indeks yapısında olan tablolardaki kayıtlar, fiziksel olarak indeksleme alanına göre dizilmiş şekildedir. Bu yapılanma dengeli ağaç(B-Tree) yapısına sahiptir. Kümelenmiş indeks oluşturulurken asıl verilerin olduğu veri sayfasına(data page) göstergeleri(pointer) kullanarak ulaşılmasına gerek kalmaz.  Çünkü kümelenmiş indeks gerçek verilerin sahip olduğu veri sayfaları üzerinden elde edilmiştir. Bu şekilde bir kümelenmiş indeks tarandığında ulaşılan yer verinin kendisidir. Yapılan taramalarda hızlı bir sonuç alınır. Eğer bir tabloda anahtar değer(primary key) varsa bu bir kümelenmiş indeks yapısıdır. Bir tablo üstünde bir kümelenmiş indeks tanımlanabilir. Bu nedenle tablo üzerinde yapılacak sorgular gözden geçirilip hangi sorguya göre aranacağına karar verilmelidir. Kümelenmiş indeks ya artan ya da azalan sırada olmalıdır.

-“Nonclustered”  İndeks: Bir veri yapısında kümelenmiş indeks oluşturulduktan sonra farklı bir alan üzerinden tekrar indeksleme yapılmak isteniyorsa “nonclustured” indeks kullanılır ve veri sayfalarının dışında bunun için tekrar bir dengeli ağaç yapısı oluşturulur. Herhangi bir arama yapıldığında ilk önce dengeli ağaçtaki indeksler taranır  ve bu ağaç üzerindeki  düğümün(node) gösterdiği veri sayfasına  gösterge vasıtasıyla gidilir. Bu şekilde istenilen veriler elde edilmiş olur. Nonclustered indekste verilere direk erişilemez. Elde edilen indeksleme yapısına erişmek için kümelenmiş indeks yapısı kullanılmış olur. Verileri herhangi bir alana göre sıralandığında erişim kümelenmiş indeks üzerinden anahtar değer  referans alınarak yapılır. Bu nedenle “nonclustered” indeks zaman ve performans kaybına neden olabilir. “nonclustered” indeks bir tabloda en fazla 249 adet oluşturulabilir.

-Tek(Unique) İndeks: İndeksteki indeksleme alanı olarak seçilen sütundaki verilerin tekrar kullanılmaması için bu yapı kullanılır. Veriye erişim hızını arttırır. Bu indeksleme çeşidi kümelenmiş ve “nonclustered” indeksler üzerinde kullanılabilir.

CREATE UNIQUE INDEX [indexadi] ON [dbo].[tabloAdi]
(
[kolonAdi] ASC
)

CREATE NONCLUSTERED INDEX [indexAdi] ON [dbo].[kolonAdi]
(
[kolonAdi] ASC
)