2 Ocak 2009 Cuma

SQL Veritabanında Index oluşturuken Include column özelliği

Select email from tKisi where AD = 'ismail' and Soyad='aydın'

şeklinde bir sorgumuz olsun. tKisi tablosunda 1.000.000 kayıt olduğunu düşünelim. Hemen ilk yapacağımız şey ne olur AD ve SOYAD alanlarından oluşan bir index oluşturmak.


CREATE NONCLUSTERED INDEX [AD] ON [dbo].[tKisi]
(
[AD] ASC,
[SOYAD] ASC
)

Evet bunu yaptığımızda read count ve scan count değerlerine bakarak sorgunun performansını gözlemlediğimizde çok ciddi bir hız artışı göreceğiz.

SQL bu sorgunun yanıtını bize verirken AD ve SOYAD için index ağacı üzerinden aramasını yapar ve sonucu geri dönmek için email alanına ihtiyacı vardır. Bu değeri elde etmek için index üzerinden tabloya bir erişim yapar ve email bilgisini bize verir. İş te bu erişim de bir zaman maliyetidir. Bu durumu engellemek için. email alanı index oluştururken include özelliği indexe ekleriz böylece. email bilgisini tabloya gitmeden index tanımı üzerinden alarak bize geri dönüşünü yapar.


CREATE NONCLUSTERED INDEX [AD] ON [dbo].[tKisi]
(
[AD] ASC,
[SOYAD] ASC
)
INCLUDE ( [email])

Burda akla şu soru gelebilir. Neden email alanını da indexe tanımlamadık. Bir veriyi direk indexe eklediğimiz durumda Index için oluşturulan binary tree nin yapısı değişmektedir. Biz ağaçta yeni bir karar mekanizması değil, ilgili veriye index üzerinden ulaşılır ulaşılmaz ilgili kaydın başka bir verisini geri almak istediğimiz için INCLUDE yapısını tercih ettik.

Hiç yorum yok:

Yorum Gönder