SQL Server INDEX Oluşturma
“ Select * from Tbl_Personel Where Adi Like ‘a%’ ” şeklinde çekilen bir sorguda tablodaki kayıtları tek tek aramaya başlar ve ismi “a” harfi ile başlayan kayıtları listeler, bu işlemi yaparken tablonun en başından başlar ve bu yoğun bir tablodaki erişim hızını oldukça etkiler.
Veriler hızlı erişim için kullanılması gereken yöntem ise index ‘lemedir.Sql server sorgu çalıştırıldığında öncelikle index ‘leme var mı kontrol eder ve sorguyu bu duruma göre çalıştır.
İki çeşit index vardır ; “CLUSTERED ve NONCLUSTERED”
Bir tabloda 1 tane CLUSTERED 249 adet de NONCLUSTERED index oluşturulabilir. Oluşturduğunuz bir tablo üzerinde eğer id kolonunu “SET PRİMARY KEY” yaparsanız, bu kolon otomatik olarak bir CLUSTERED INDEX oluşturur.
“Cannot create more than one clustered index on table ‘Tbl_Temel’. Drop the existing clustered index ‘PK_Tbl_Temel’ before creating another.”
“CREATE CLUSTERED INDEX X_INDEX ON Tbl_TemelBilgi(id)”
Gördüğünüz CLUSTERED bir index olduğu halde yeni bir CLUSTERED index oluşturmak istersek SQL Server bir den fazla CLUSTERED index oluşturamayacağımızı eğer istersek mevcut index ‘i silip yeniden oluşturabileceğimizi söyleyerek bizi uyarıyor.
Peki, index nasıl oluşturulur?
“Create NONCLUSTERED INDEX X_INDEX ON TBL_TemelBilgi(Adi)”
Şeklinde yazarak Tbl_TemelBilgi Tablosu üzerindeki (Adi) Kolonunda NONCLUSTERED index oluşturduk. İndex kontrolünü dilerseniz tablo üzerine sağ click à design ve kolon üzerine sağ clickàIndexs / Keys şeklinde görüntüleyebilirsiniz.
Yada “EXEC sp_helpindex ‘Tbl_TemelBilgi’” şeklinde helpindex ile mevcut index yapınızı görebilirsiniz.
Mevcut bir index ‘i disable yapmak için= “ALTER INDEX X_INDEX ON Tbl_TemelBilgi Disable”
Disable edilmiş index ‘i tekrar aktif etmek için = “ALTER INDEX X_INDEX ON Tbl_TemelBilgi Rebuild”
İndex ‘i tamamiyle silmek için = “DROP INDEX X_INDEX ON Tbl_TemelBilgi”
Aynı anda birden fazla index oluşturmak için = “Create NONCLUSTERED INDEX X_INDEX ON Tbl_TemelBilgi (Adi,Soyadi)”
Bir tabloyu tamamiyle silerseniz, o tablo üzerindeki bütün index ‘leride tamamıyla silmiş olursunuz.
İndex oluşturmanın faydası nedir derseniz?
Bunu birörnekle açıklamak gerekirse;
Elinizde çok kalın bir kitap var ve patronunuz bu kitaptan size adını söylediği konunun hangi sayfada olduğunu bulmanızı söyledi. Nasıl bulacağınızı bilemezsiniz tabi ki doğal olarak fakat kitabın arkasındaki index size yardımcı olursa çabucak bulursunuz.
Büyük ölçekli veritabanlarında da index ‘ ler çok önemlidir ve bu sayede performans önemli derecede artar.
UNIQUE SÖZCÜĞÜ
Bir tablo indeks’leme alanı olarak seçilen sütundaki verilerin tekrarlanması istenmiyorsa, indeksleme yapılırken, CREATE INDEX komutu içinde UNIOUE sözcüğü kullanılmalıdır.
Sorgunun dizilimi
“CREATE UNIQUE INDEX Index_Name ON Tablo (Sütun);” şeklindedir.
UNIQUE sözcüğü kullanılarak yaratılan index sayesinde sütun’da yinelenen bir kayıt olmayacaktır.
Yalnız dikkat edilmesi gereken bir nokta ise INDEX oluşturulacak tablonun sütununda tekrarlanan kayıt olmamalıdır. Eğer var ise
“The CREATE UNIQUE INDEX statement terminated because a duplicate key was found for the object name ‘dbo.Tbl_TemelBilgi’ and the index name ‘X_INDEX’. The duplicate key value is (Ahmet).
The statement has been terminated.”
Şekinde hata ile karşılaşırsınız.Hatada “Ahmet” adinin yinelendiğini ve UNIQUE Index oluşturulamayacağını belirtmektedir.
Gördüğünüz gibi index oluşturmak istediğimiz alanda yinelenen kayıt olduğu için index oluşturmamıza izin vermedi.
Yinelenen kaydı sildiğimde ise index oluşturma işlemi başarılı bir şekilde gerçekleşecektir.
İndex oluşturduktan sonra ise “Adi” Alanına yinelenen bir kayıt girmek istersek
“insert into Tbl_TemelBilgi (Adi) VALUES (‘Ahmet’)”
“Cannot insert duplicate key row in object ‘dbo.Tbl_TemelBilgi’ with unique index ‘X_INDEX’.
The statement has been terminated.”
UNIQUE Index olan bir alana yinelenen kayıt giremezsiniz şeklinde bir uyarı ile karşılaşırız. Başka bir makalede görüşmek üzere…