SQL Server

SQL Server INDEX Oluşturma

Veritabanı üzerine kayıt sayısı arttıkça çekilen sorguların döndüreceği değerlerin karşımıza gelmesi de o kadar zaman alacaktır. Örnek olarak

“ 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.

 

 

 

image001

 

 

 

image002

 

 

 

 

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.

 

 

 

 

 

image003

 

 

 

 

Yada “EXEC sp_helpindex ‘Tbl_TemelBilgi’” şeklinde helpindex ile mevcut index yapınızı görebilirsiniz.

 

 

 

 

image004

 

 

 

 

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.

 

 

 

 

image005

 

 

 

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.

 

 

 

 

image006

 

 

 

 

İndex oluşturduktan sonra ise “Adi” Alanına yinelenen bir kayıt girmek istersek

insert into Tbl_TemelBilgi (Adi) VALUES (‘Ahmet’)”

 

 

 

 

image007

 

 

 

 

“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…

İlgili Makaleler

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu