Sql İndex Nedir ve ne işe yarar

İndex ilişkili tablonun indexleme alanı olarak kullanılan kolondaki verilere göre sıralanmış
biçimde işleme konulmasını sağlar. Eğer bir tablo indexlenmişse bu tablo içinde arama veya
listeleme işlemi çok hızlı bir biçimde gerçekleştirilecektir. Tablo üzerinde yapılan Select, İnsert,
Update gibi işlemlerin daha performansla çalışması için oluşturulan nesnelerdir. Bir örnekle
açıklayalım, çok büyük bir tablo üzerinde işlem yapıyorsanız ve çalıştığınız data miktarı tablonun
toplam data size’ ının %5-6 ından büyük değilse ; böyle bir durumda eğer index kullanmıyorsanız
çalıştığınız sorgu tablonun yer aldığı tüm blokları okumaya çalışacaktır. Eğer index kullanırsanız
da sadece ilgili blokları okumayacağı çalışacağından sorgunuz daha performanslı çalışması
sağlayacaktır. İndexler genel olarak Select sorguları, Where cümleciği içeren Update sorguları ve
yine Where cümleciği içeren Delete sorgularında ciddi performans artışları sağlarlar. İndexler
Insert sorgularında ise performance düşürücü bir etkiye sahiptirler.Yine indexsli kolonlar
üzerinde yapılacak update – delete işlemleride nispeten yavaş olacaktır..SQL Server’da 2 farklı
Index yapısı mevcuttur. Clustered ve non-clustered. Clustered kümelenmiş, sıralanmış anlamına
gelirken, non-clustered kümelenmemiş, sıralanmamış anlamlarına gelmektedir. Clustered index
yapısına sahip bir tabloda sıralı olarak satırlar devam etmektedir. Non-clustered ise biraz daha
farklı bir yapıdır ve burda sıra ile satırların devamlılığı yoktur. Peki neden indeks yapıyoruz,
tekrarlı satırlara sahip verilerin olmaması amacı ile. Her tablom için bir ID atamam sıralı olarak
verilerimin hem düzenli olmasını sağlar hemde tekrarlı veri durumunu engeller. Bir tablo yalnızca
tek bir clustered index yapısına sahip olmalıdır.Non-Clustered Index mimarisinde fiziksel bir
sıralama söz konusu değildir. Index değeri, Clustered Index’in aksine verinin kendisi değil
pointer değeridir. Bu pointer değeri verinin nerede olduğunu gösterir. Non-clustered Index bir
tabloda maksimum 999 tane olabilir.(Sql Server 2008 için)
Söz Dizimi :
CREATE [ CLUSTERED | NONCLUSTERED ] INDEX isim ON tablo ( { kolon | ( ifade ) }