Index ne ucun yaradilir?
Database-ler melumatlarimizi saxlayir ve 1 database icinde olan melumatlar coxaldiqca artiq performansda zeiflik yaranir.Bize ise sorgularimizi cox tez 1 sekilde calisdirmaq ve melumatlari elde etmek lazimdir.Meselen:
Select ad form Hale where ad like a%
Bele 1 sorgu yazdigimiz zaman sql server cedvelimiz icinde olan butun melumatlari tek tek axtarmaga baslayir ve adi a herfi ile baslayanlari siyahilayir.Bu zaman axtaris cedvelin en basindan baslanir ve buda performansi asagi salir.Indexleme yaratsaq bu zaman sql server sorgu calisdirilanda ilk once 1 index olub olmadigini yoxlayir.
Tutaqki PhoneBook adinda 1 cedvelimiz var ve icerisinde 6 milyona qeder melumatlarimiz var.
Texminen 1 GB-a qeder yer tutan bu cedvelimizde axtaris etmemin ne qeder vaxt alacagini ve ne qeder yaddas istifade edeceyini gormek ucun asagdiaki kimi 1 test edek.:
Altindan xett cekilen hissede gorduyumuz kimi texminen 160.000-e qeder logical read edildi.Bu zamanda 547ms kimi 1 CPU zamani istifade olundu.Sade 1 sorguda bu qeder 1 netice oldugunu gorduysek minlerle istifadecinin sorgularini elde etmek ucun ne qeder vaxt lazim olacagini yeqinki dusune bilersiniz.
Umumiyyetle,cedvellerimiz sql serverde page-ler ile saxlanilir.melumatalrimiz ise her page icinde sutunlar icinde saxlanilir.Her page page number,page icinde olan bos sahe ve page tipini tutan 96 byte-liq 1 header saxlayir.
Indexleme sql serverde 2 yere ayrilir:
-Clustered Index
-Non-Clustered Index
Cedveller uzerinde index yaratmaq ucun
CREATE INDEX ifadesinden istifade olunur.Indexler melumatlari daha suretli tapmaq ucun yaradilirlar.Bu zaman cedvelde olan butun melumatlar oxunmur.Istifadeciler indexleri gore bilmirler sadece olaraq sorgulari suretlendirmek ucun istifade edirler.Index qoyulmus cedvellerin update-i index qoyulmayan cedvellerin update-inden cox vaxt aparir.Cunku indexlerin ozleride update olunmaga ehtiyac duyurlar.
SYNTAX-i:
CREATE INDEX index_adi
ON table_adi (sutun_adi)
Ilk olaraq cedvelimizde Clustered Index yaradaq.
Index yaratdiqdan sonra evvel yazdigimiz sorgunu yeniden calisdirsaq:
Yuxaridaki neticede aciq askar gormek olurki 4 logical read sayesinde neticeni elde etdik.Bu nece oldu?
Cedvelimizdeki melumatlar Clustered Index ile beraber yeniden gozden kecirilerek tree seklinde saxlanildi.Indexleme emeliyyatindan sonra emeliyyatlarimiz index olaraq mueyyen etdiyimiz sutuna gore tree uzerinde axtarilir.Clustered Index bize performans olaraq daha yaxsi 1 netice qazandirdi.Ancaq cox vaxt yalnizca Clustered Index istifade etmek yeterli olmur.Meselen,cedvelimizde id ile axtaris qeder tez tez istifade etmesekde "job" sutununa gorede axtaris etdiyimizi dusunek.Sadece 1 defe istifade ede bileceyimiz Clustered Index haqqimizi id sutunu ucun istifade etdik.Bu zaman komeyimize Non-Clustered Index gelecek.
StringField1 ucun Non-Clustered Index yaradaq:
Sorgumuzu calisdiraq:
Netice goz qabagindadir.Clustered Index ile Non-Clustered Index arasidnaki ferq nedir?
SQL SERVERDE olan cedvel ucun Clustered Index yalniz 1 dene yaradila biler.Bunun sebebi,Clustered Index yaratmagimizla beraber melumatlarimizin key olaraq siralanaraq yadda saxlanilir.
Non-Clustered Index ise cedvel basina 999 dene yaradila biler.(sql server 2005de 249 denedi).Non-Clustered Index yaradildiginda melumatlar siralanmir ve oldugu yer ile elaqeli basqa deyisiklik olmur.Bu indexleme novunde key-imize gore 1 tree yaradilir ancaq cedvelimizin melumatlari bu tree icerisinde yerlesmir.Yeni,Non-Clustered Index ile axtaris etdiyimiz zaman ilk olaraq axtardigimiz sutunun Clustered Index ucun istifade olunan keyine access edirik.Bu key ile Clustered Index uzerinde axtaris ederek butun melumatlarimiza catiriq.