SQL Server’da Index nedir? Nasıl Çalışır?

Yazar: admin 0 comments

SQL Server açısından index kullanımının en önemli amacı, istenen bilginin daha az veri okuyarak daha kısa zamanda getirilmesini sağlamaktır. Index kullanarak bir tablonun tamamını okumaktansa index key vasıtasıyla okumak istediğimiz kayıda daha hızlı ulaşmak mümkündür. Tamamlanması saatler süren bir sorgunun uygun index’ler kullanılarak saniyeler seviyesinde getirilmesi sağlanabilir.

Peki ama tam olarak Index nedir?

Gerçek hayattan bir örnek vererek Index kavramını daha net açıklamaya çalışalım.
Bir telefon rehberi düşünün. Hani şu eskiden PTT’nin dağıttıklarından. İstanbul’da yaşayan herkesin telefon bilgilerinin bu rehberde kayıtlı olduğunu düşünelim. Mehmet Yılmaz adında bir arkadaşım var ve telefon numarasını kaybettiğim için kendisine uzun süredir ulaşamıyorum. Telefon rehberini kullanarak Mehmet’in telefon numarasını bulmak istiyorum.

İlk durumda şunu düşünelim (Index olmayan bir tablo). Telefon rehberi sıralı değil. Yani ne ada göre ne de soyada göre herhangi bir sıralama yapılmamış, isimler karışık olarak bulunmakta. Böyle bir durumda ben Mehmet’i bulmak için bütün telefon defterini okumak zorundayım. (Table Scan) Ne kadar sıkıcı değil mi?

İkinci durumda ise telefon defterinin isme göre sıralı olduğunu düşünelim. (Index olan bir tablo) Bu durumda biliyorumki Mehmet M harfinde. Kabaca rehberin ortasına gelirim. Ve oradaki harfe bakarak ileriye ya da geriye gitmem gerektiğine karar veririm. Yani bir önceki örneğe (Index olmayan durum) göre çok çok daha hızlı bir şekilde Mehmet’i bulabilirim.

İşte Index kullanımının amacı budur. İstenilen bilgiye daha az veri okuyarak daha hızlı bir şekilde erişmek.
Canlı bir örnek yaparak table scan-index kullanımı arasındaki farka az önce bahsettiğim daha fazla/daha az veri okuma açısından bakalım. Sorguların ilkinde tabloda tanımlı index olmadığı için table scan yapılacak, 2. sinde ise tabloya Clustered Index tanımlayıp sorguyu çekeceğim ve Database Engine bu tanımlamış olduğum Clustered Index’i kullanacak.

Bu işlemleri yapmak için bir çalışma tablosu oluşturuyorum ve bu tabloya kayıt dolduruyorum.

drop table tblIndexDeneme1
GO
create table tblIndexDeneme1 (ID int, Ad varchar(20), SoyAd varchar(20), Telefon varchar(10))
GO
declare @i int=1
while @i begin
insert tblIndexDeneme1
select @i,’Turgay’+cast(@i as varchar(10)),’Sahtiyan’ + cast(@i as varchar(10)),’555 55 55′
set @i=@i+1
end
GO

Tabloda ID,Ad,SoyAd ve Telefon şeklinde 4 kolon mevcut ve tablo üzerinde herhangi bir index tanımlaması yapılmamış durumda. Bir sonraki yazıda ise Table Scan Yaparak Kayıt Sorgulama dan bahsedeceğiz.

Bir Cevap Yazın

Önceki Yazı
«
Sonraki Yazı
»