SQL SERVER INDEXLER
Index: Kısaca data’ya erişim zamanını kısaltan yapılardır.Konunun devamında hangi sütunlara index uygulamalıyız ve neden ,index çeşitleri nelerdir,sorularına cevap arayacağız.
Öncelikle neden index yaratmalıyız ;
Databasedeki kayıt sayısı arttıkça performansta bir düşüklük yaşanır. Data yoğunluğu arttıkça da istenilen sonuca ulaşma süresi uzar. Oysa bizim için önemli olan maximum performansı elde tutmaktır.
Bir sql sorgusu çalıştığında neler olur örnek bir sorgu yazarak görelim.
-- SELECT isim FROM deneme WHERE ad LIKE e%
Sorgu çalıştığında tablo içindeki tüm sayfaları tek tek aramaya başlar ve ismi e harfi ile başlayanları (bizim belirlediğimiz kriterlere uyan kayıtları) listeler. Tabi bu işlemi yaparken tablonun başından başlar ve bu verilere erişim hızını düşürür.
Diğer bir yöntem ise indexleme kullanımıdır sql server sorgu çalıştırıldığında öncelikle bir index olup olmadığını kontrol eder.Başlıca nedeni tabiki hızlı erişim. Örneğin kitapların arka kapaklarında index bölümü vardır. Diyelim ki kitabın içinde group by terimini arıyorsunuz bunun için ya bin küsür sayfalık kitabın bütün sayfalarını tarayacaksınız ya da index bölümünden alfabetik olarak o terimin hangi bölümünde kaçıncı sayfada olduğunu hemen kolaylıkla bulacaksınız.
Index Çeşitleri;
1_)Clustered Index :
-Bir tabloda en fazla bir tane clustered index uygulayabileceğimizi unutmamalıyız(Primary key veya Uniqe key alanlar)
-Clustered indexler tablonun içindeki verinin fiziksel sıralamasını tanımlarlar.
-Tablo boyutunun % 5 i kadar yer kaplarlar.Yaratılırken bu boyut geçici bir süre için %20 ye çıkar.
-Bir satır silindiği zaman oluşan boşluk yeni bir satır girişi için hazır bekler.
2_)Non-Clustered Index:
-SQL Server’da bir tabloda en fazla 249 non_clustered index tanımlanabilir.(son sürümünde bu sayı daha da arttı.)
-Oluşturulan index’in yapısı belirtilmezse non_clustered index oluşturulur.
-Non_clustered index’ten önce clustered index oluşturulması performansı arttırır.
-Tablo ve bu tabloya ait nonclustered index ler farklı filegroup larda olabilir. Farklı harddiskler de yer alması performansı artırır.
Hangi Sütunlara Index konulmalıdır?
- Primary key ve Foreign key sütunları.
- Sorgularda çook sık kullanılan sütunlar.
- Çok sık sıralamaya tabi tutulan sütunlar.
- Gruplama yapılan sütunlar (group by).
Index gerektirmeyen Sütunlar:
- Nadiren sorgulanan sütunlar.
- Az seçeneği olan sütunlar(cinsiyet,ülke gibi).
- Text,ntext ve image sütunları.
Dikkat edilecek noktalar:
- Primary key veya Unique constraint oluşturulduğu zaman index otomatik olarak oluşturulur. Standart index oluşturmak yerine Primary key veya Unique constraint tercih edilmelidir.
- View’larda da index olabilir.
- Bir sütun üzerinde index oluşturmadan evvel bir index’e sahip olup olmadığı araştırılmalıdır.
- Bir tabloda index oluştumak için tablonun sahibi olmak gerekir.
Unique (Benzersiz) Index: Bir kolon üzerinde bu özellikle yaratılan unique indexlerde kolona aynı değerde bir kayıt girilemez.
- Hem clustered hem de nonclustered için kullanılabilinir.
- Primary key ve unique constraint varsa zaten unique index oluşturulmuştur.
- Unique özelliği dolu bir tabloya index oluşturulurken veya daha sonradan ekleniyorsa önce tablodaki o kolona ait bilgilerinden eşsiz olduğuna emin olduktan sonra yaratılır.
Composite (Birleşik) Index: Birden fazla kolona uygulanabilen indexlerdir.
-Sorgularda sık sık kullanılan birkaç kolona ayrı ayrı index oluşturmaktansa bu kolonları tek bir index altında toplamak tercih edilmelidir. Daha performanslıdır.
- En fazla 16 sütun olabilir.
- View larda kullanılacaksa farklı kolonlar farklı tablolarda olabilir.
- Aynı sütunü birden fazla index içinde kullanmak çok kullanışlı değildir.
Page Split: Clustered indexlerde yeni eklenen veya güncellenen bir satır için yeterli yer yoksa sayfa ikiye bölünür. Non_clustered indexlerde bölünme olmaz, yeni sayfa sona eklenir, ilişkisi olduğu diğer sayfadan oraya yönlendirme yapılır(Page forwarding).
Index Seçenekleri
FillFactor: Clustered ve nonclustered index lerde kullanılabilinen fillfactor özelliği ile update ve insert işlemlerinde performans artışı sağlanılır. Bir index sayfası dolduğu zaman sql server yeni gelen satırlara yer açmak için leaf level da PageSplit kullanır. FillFactor kullanarak yeni kayıtlar için leaf level da boş satırlar bırakabiliriz.
- Fillfactor sadece index yaratılırken veya yeniden yapılandırırken belirlenebilir, daha sonra dışardan değiştirilemez.
- Fillfactor oranı bilgileriniz ne kadar sıklıkla değiştiğine ve yeni kayıtlar eklendiğine göre belirlenir.
4 yorum - Gönderen : Egemen Ateş (12:02 PM) - Kategori : Genel | SQL