SQL Server 2012’de Index
Kavramı Performance Tuning ve
Query Optimization
 INDEX YÖNETİMİ:
lndex; bir veri tabanı içinde bulunan verileri hızlı açmak daha
doğrusu hızlı sorgulamak için çok gerekli olan bir yapıdır.
Ancak zamanla index yapısı bozulabilir ve bunun yeniden
yapılandırılması gerekir. İşte bu yüzden veri tabanı
yöneticisinin; index oluşturma(Create
lndex), değiştirme(Alter Index) ve silme(Drop lndex)
işlemlerini çok iyi bilmesi gerekmektedir.
SQL Server 2012 içinde bir veri sayfası (Data Page) içindeki
bir satır(Row) lokasyonuna index uygulanabilir. Bu da bir
tablodaki tüm veri sayfalarına uygulanan yönteme göre
avantajlar sağlar.
Index yapısı, veri tabanının performansını arttırmak için
kullanılır. Bu kısımda temel index yapısını nerede ve nasıl
kullanacağımızı inceleyeceğiz.
Neden Index ?
 SQL Server açısından index kullanımının en
önemli amacı, istenen bilginin daha az veri
okunarak daha kısa zamanda getirilmesini
sağlamaktır.
 Index kullanarak bir tablonun tamamını
okumaktansa index key vasıtasıyla okumak
istediğimiz kayıda daha hızlı bir şekilde
ulaşmamız mümkündür.
 Tamamlanması saatler süren bir sorgunun
uygun index’ler kullanılarak saniyeler
seviyesinde getirilmesi sağlanabilir.
 Telefon rehberi index kullanımı için iyi bir
örnektir. (Karışık Rehber – Sıralı Rehber)
 Canlı örnek - table scan-index kullanımı
arasındaki fark
 Gerekli index’ler faydalı olduğu gibi çok fazla
index kullanımı performans sıkıntısı doğurur.
Index Nasıl Çalışır ? (B-Tree – Balanced Tree
Yapısı)
 Index’in çalışma prensibini
anlamak, Index tipine ve Index’in hangi
kolonlar üzerine tanımlanması
gerektiğine karar verme aşamaları için
oldukça önem taşımaktadır.
 Client İsteği -> Protocol Layer -> Parse -
> Query Processor
 Query Processor = Optimize + Execute
 Optimize = En Uygun Index’ten Query
Plan Oluşturulur.
 Execute = Bu aşamada Index üzerinde
B-Tree yapısı kullanılarak arama yapılır.
Index Nasıl Çalışır ? (B-Tree – Balanced Tree
Yapısı)
 1 Level Root
 1 veya 1’den fazla Intermediate Level
 1 Level Leaf
 Index’lerde B-Tree Yapısı
NonLeaf Level
Index Nasıl Çalışır ? (B-Tree – Balanced Tree
Yapısı)
 Örnek B-Tree Yapısı
 Canlı data üzerinde index B-Tree
arama demosu
Clustered Index
 Clustered Index = Fiziksel Index
 Diskte veriler mantıksal olarak sıralı
tutulurlar. (Page Chain)
 Bir tabloda sadece 1 adet Clustered
Index bulunabilir.
 Leaf Level = Datanın Kendisi
 Ada göre sıralı bir telefon defteri
Clustered Index için iyi bir örnektir.
 Otomatik artan (Identity) bir alana
Clustered Index tanımlanması bize
kolaylık sağlayacaktır.
Clustered Index NonLeaf Level Page Örneği
 ChildFileId
 ChildPageId
 Id – Clustered Index Key
 UNIQUIFIER – Key’i Unique’leştirmek İçin Kullanılır. (4 byte Integer)
Alt Level Page’lere Erişmek İçin Kullanılır
NonClustered Index
 Telefon defteri için mesleki bir index
yapmak iyi bir NonClustered Index
örneğidir.
 Leaf Level = Row Locator + Included
Kolonlar
 Row Locator Heap ya da Clustered
Index durumuna göre farklılık gösterir.
◦ Heap -> Dosya Numarası (File Identifier)
+ Sayfa Numarası (Page Number)
+ Kayıt Numarası (Slot Number)
◦ Clustered Index -> Clustered Index Keys
+ (UNIQUIFIER)
NonClustered Index NonLeaf Level Page Örneği
 ChildFileId
 ChildPageId
 Ad – NonClustered Index Key
 Id – Clustered Index Key
 UNIQUIFIER(*) – Key’i Unique’leştirmek İçin Kullanılır. (4 byte Integer)
Alt Level Page’lere Erişmek İçin Kullanılır
*Bir key’in unique olup olmaması index tanımlanırken kullanılan UNIQUE ifadesine bağlıdır.
NonClustered Index Leaf Level Page Örneği
 Ad – NonClustered Index Key
 SoyAd – Included Column
 Id – Clustered Index Key
 UNIQUIFIER
 SoyAd– Included Column
Lookup yapmak için kullanılır.
Örneklerle Index Page’lerin İncelenmesi
 Clustered Index’te Page’lerin Yapısı
◦ Unique Clustered Index
◦ Unique Olmayan Clustered Index
 NonClustered Index’te Page’lerin Yapısı
◦ Heap Tablo + Unique NonClustered Index
◦ Unique Clustered Index + Unique NonClustered Index
◦ Unique Olmayan Clustered Index + Unique NonClustered
Index
◦ Unique Olmayan Clustered Index + Unique Olmayan
NonClustered Index
Unique Clustered Index
Unique Olmayan Clustered Index
Heap Tablo + Unique NonClustered Index
Unique Clustered Index + Unique NonClustered
Index
Unique Olmayan Clustered Index + Unique
NonClustered Index
Unique Olmayan Clustered Index + Unique Olmayan NonClustered
Index
NonClustered Index’te Included Kolon Kullanımı
 SQL Server 2005 ile gelen bir özelliktir.
 Amaç sorguyu cover edip lookup yapmamaktır.
 Covering Index = Lookup yapma ihtiyacı olmadan istenen tüm
bilgileri leaf level page’lerinde bulunduran NonClustered Index’lerdir.
 NonLeaf Level Page’lerde covering column’u bulundurmayıp boyutu
arttırmadan sadece leaf level page’lerde bulundurmayı amaçlar.
 Telefon Rehberi için verilen mesleki NonClustered Index örneği
Included kolon ile yapılırsa lookup’tan kurtulunur.
 Canlı Örnek - %1.2 daha az index boyutu
◦ Composite Index – (örn. 25.41 MB)
create nonclustered index IX_1 on Person.Address
(City,AddressLine1,PostalCode)
◦ Included Index – (örn. 25.16 MB)
create nonclustered index IX_1 on Person.Address
(City) INCLUDE (AddressLine1,PostalCode)
STATİSTİCS
Statistics bilgiler, bir index veya bir sütun için uygulanabilir. Bu kısımda, bunları nasıl
gerçekleştireceğimizi inceleyeceğiz.
STATİSTİCS OLUŞTURMA ve GÜNCELLEME:
İstatistik bilgiler, sysyindexes tablosu içinde bulunan statblob sütununda tutulur.
Image veri tipine sahip bu sütunda bulunan bilgiler;
İstatistiklerin en son güncellendiği, tarih ve saat.
Tablo içindeki satırların sayısı.
Histogram ve Density bilgileri.
Ortalama key uzunluğu.
Histogram yapısında benzersiz değerler.
Statistics, otomatik veya manuel olarak oluşturulabilir.
Manuel Oluşturmak İçin:
CREATE STATİSTİCS ifadesi ile manuel
olarak, istatistik bilgileri oluşturulabilir. Bu ifadeyi
kullanabilmek için, mutlaka tablonun sahibi olmak
gerekir.
Oluşturabileceğimiz istatistik seçenekleri;
--lndex'lenmemiş sütunlar,
--Composite index içindeki ilk sütun dışında kalan
sütunlar,
--Koşul verilmiş computed sütunlar,
--Image, text ve ntext veri tiplerine sahip olmayan
sütunlar.
Otomatik Olarak Oluşturmak İçin:
Veri tabanı üzerinde sağ tuşa basılarak
Properties seçeneğine tıklanır ve gelen
iletişim kutusundan Options sayfasına
geçilerek, Auto Create Statistics değeri
True yapılır. Varsayılan olarak bu zaten
True değerindedir. Otomatik Statistics
devreye sokulduğu zaman, index
sütununda bulunan veriler ve index'siz
sütunlardan JOIN veya VVHERE ifadesi
kullananların istatistikleri, otomatik olarak
oluşturur
UPDATE STATİSTİCS
UPDATE STATİSTİCS komutu ile
manuel olarak, Statistics
güncellenebilir.
Aşağıdaki durumlarda istatistiklerin
güncellenmesi gerekebilir;
-- Tablo içine herhangi bir kayıt girmeden
önce index oluşturulacaksa,
--Tablo truncated ise,
--Çok az aynı tür veri içeren birçok
kayıt, tabloya ekleniyorsa.
Sonuç - Özet
 Index’i SQL Server’ın beygir gücü olarak tanımlayabiliriz. Etkin index
kullanımı verinin sorgulanması ihtiyacını daha etkin bir şekilde
karşılamak için göz önünde bulundurulması gereken en önemli
konudur
 Clustered ve NonClustered Index’lerin davranışları farklı olduğu için
bu 2 index tipi arasındaki farkı bilmek Index oluşturma açısından
önemlidir.
 Index’lerin B-Tree yapısının ne şekilde çalıştığı bir diğer önemli
konudur.
 Index’lerin tanımlanmış olması, sürekli performanslı bir çalışma
getireceği manasına gelmez. Periyodik olarak Index’lerin bakımının
yapılması Index performansına etki eden önemli faktörlerden biridir.
 Index kullanımı çok önemliyken, gereksiz,kullanılmayan Index’leri
sistemde bulundurmak bir o kadar dezavantajdır. Periyodik olarak
kullanılmayan ya da yazma istatistiği okuma istatistiğinden fazla olan
index’lerin belirlenip drop edilmesi gerekir
 Aynı şekilde olması gerekipte olmayan index’lerin (Missing Index)
Soru - Cevap

Sql serverda indexkavrami

  • 1.
    SQL Server 2012’deIndex Kavramı Performance Tuning ve Query Optimization
  • 2.
     INDEX YÖNETİMİ: lndex;bir veri tabanı içinde bulunan verileri hızlı açmak daha doğrusu hızlı sorgulamak için çok gerekli olan bir yapıdır. Ancak zamanla index yapısı bozulabilir ve bunun yeniden yapılandırılması gerekir. İşte bu yüzden veri tabanı yöneticisinin; index oluşturma(Create lndex), değiştirme(Alter Index) ve silme(Drop lndex) işlemlerini çok iyi bilmesi gerekmektedir. SQL Server 2012 içinde bir veri sayfası (Data Page) içindeki bir satır(Row) lokasyonuna index uygulanabilir. Bu da bir tablodaki tüm veri sayfalarına uygulanan yönteme göre avantajlar sağlar. Index yapısı, veri tabanının performansını arttırmak için kullanılır. Bu kısımda temel index yapısını nerede ve nasıl kullanacağımızı inceleyeceğiz.
  • 3.
    Neden Index ? SQL Server açısından index kullanımının en önemli amacı, istenen bilginin daha az veri okunarak daha kısa zamanda getirilmesini sağlamaktır.  Index kullanarak bir tablonun tamamını okumaktansa index key vasıtasıyla okumak istediğimiz kayıda daha hızlı bir şekilde ulaşmamız mümkündür.  Tamamlanması saatler süren bir sorgunun uygun index’ler kullanılarak saniyeler seviyesinde getirilmesi sağlanabilir.  Telefon rehberi index kullanımı için iyi bir örnektir. (Karışık Rehber – Sıralı Rehber)  Canlı örnek - table scan-index kullanımı arasındaki fark  Gerekli index’ler faydalı olduğu gibi çok fazla index kullanımı performans sıkıntısı doğurur.
  • 4.
    Index Nasıl Çalışır? (B-Tree – Balanced Tree Yapısı)  Index’in çalışma prensibini anlamak, Index tipine ve Index’in hangi kolonlar üzerine tanımlanması gerektiğine karar verme aşamaları için oldukça önem taşımaktadır.  Client İsteği -> Protocol Layer -> Parse - > Query Processor  Query Processor = Optimize + Execute  Optimize = En Uygun Index’ten Query Plan Oluşturulur.  Execute = Bu aşamada Index üzerinde B-Tree yapısı kullanılarak arama yapılır.
  • 5.
    Index Nasıl Çalışır? (B-Tree – Balanced Tree Yapısı)  1 Level Root  1 veya 1’den fazla Intermediate Level  1 Level Leaf  Index’lerde B-Tree Yapısı NonLeaf Level
  • 6.
    Index Nasıl Çalışır? (B-Tree – Balanced Tree Yapısı)  Örnek B-Tree Yapısı  Canlı data üzerinde index B-Tree arama demosu
  • 7.
    Clustered Index  ClusteredIndex = Fiziksel Index  Diskte veriler mantıksal olarak sıralı tutulurlar. (Page Chain)  Bir tabloda sadece 1 adet Clustered Index bulunabilir.  Leaf Level = Datanın Kendisi  Ada göre sıralı bir telefon defteri Clustered Index için iyi bir örnektir.  Otomatik artan (Identity) bir alana Clustered Index tanımlanması bize kolaylık sağlayacaktır.
  • 8.
    Clustered Index NonLeafLevel Page Örneği  ChildFileId  ChildPageId  Id – Clustered Index Key  UNIQUIFIER – Key’i Unique’leştirmek İçin Kullanılır. (4 byte Integer) Alt Level Page’lere Erişmek İçin Kullanılır
  • 9.
    NonClustered Index  Telefondefteri için mesleki bir index yapmak iyi bir NonClustered Index örneğidir.  Leaf Level = Row Locator + Included Kolonlar  Row Locator Heap ya da Clustered Index durumuna göre farklılık gösterir. ◦ Heap -> Dosya Numarası (File Identifier) + Sayfa Numarası (Page Number) + Kayıt Numarası (Slot Number) ◦ Clustered Index -> Clustered Index Keys + (UNIQUIFIER)
  • 10.
    NonClustered Index NonLeafLevel Page Örneği  ChildFileId  ChildPageId  Ad – NonClustered Index Key  Id – Clustered Index Key  UNIQUIFIER(*) – Key’i Unique’leştirmek İçin Kullanılır. (4 byte Integer) Alt Level Page’lere Erişmek İçin Kullanılır *Bir key’in unique olup olmaması index tanımlanırken kullanılan UNIQUE ifadesine bağlıdır.
  • 11.
    NonClustered Index LeafLevel Page Örneği  Ad – NonClustered Index Key  SoyAd – Included Column  Id – Clustered Index Key  UNIQUIFIER  SoyAd– Included Column Lookup yapmak için kullanılır.
  • 12.
    Örneklerle Index Page’lerinİncelenmesi  Clustered Index’te Page’lerin Yapısı ◦ Unique Clustered Index ◦ Unique Olmayan Clustered Index  NonClustered Index’te Page’lerin Yapısı ◦ Heap Tablo + Unique NonClustered Index ◦ Unique Clustered Index + Unique NonClustered Index ◦ Unique Olmayan Clustered Index + Unique NonClustered Index ◦ Unique Olmayan Clustered Index + Unique Olmayan NonClustered Index
  • 13.
  • 14.
  • 15.
    Heap Tablo +Unique NonClustered Index
  • 16.
    Unique Clustered Index+ Unique NonClustered Index
  • 17.
    Unique Olmayan ClusteredIndex + Unique NonClustered Index
  • 18.
    Unique Olmayan ClusteredIndex + Unique Olmayan NonClustered Index
  • 19.
    NonClustered Index’te IncludedKolon Kullanımı  SQL Server 2005 ile gelen bir özelliktir.  Amaç sorguyu cover edip lookup yapmamaktır.  Covering Index = Lookup yapma ihtiyacı olmadan istenen tüm bilgileri leaf level page’lerinde bulunduran NonClustered Index’lerdir.  NonLeaf Level Page’lerde covering column’u bulundurmayıp boyutu arttırmadan sadece leaf level page’lerde bulundurmayı amaçlar.  Telefon Rehberi için verilen mesleki NonClustered Index örneği Included kolon ile yapılırsa lookup’tan kurtulunur.  Canlı Örnek - %1.2 daha az index boyutu ◦ Composite Index – (örn. 25.41 MB) create nonclustered index IX_1 on Person.Address (City,AddressLine1,PostalCode) ◦ Included Index – (örn. 25.16 MB) create nonclustered index IX_1 on Person.Address (City) INCLUDE (AddressLine1,PostalCode)
  • 20.
    STATİSTİCS Statistics bilgiler, birindex veya bir sütun için uygulanabilir. Bu kısımda, bunları nasıl gerçekleştireceğimizi inceleyeceğiz. STATİSTİCS OLUŞTURMA ve GÜNCELLEME: İstatistik bilgiler, sysyindexes tablosu içinde bulunan statblob sütununda tutulur. Image veri tipine sahip bu sütunda bulunan bilgiler; İstatistiklerin en son güncellendiği, tarih ve saat. Tablo içindeki satırların sayısı. Histogram ve Density bilgileri. Ortalama key uzunluğu. Histogram yapısında benzersiz değerler. Statistics, otomatik veya manuel olarak oluşturulabilir.
  • 21.
    Manuel Oluşturmak İçin: CREATESTATİSTİCS ifadesi ile manuel olarak, istatistik bilgileri oluşturulabilir. Bu ifadeyi kullanabilmek için, mutlaka tablonun sahibi olmak gerekir. Oluşturabileceğimiz istatistik seçenekleri; --lndex'lenmemiş sütunlar, --Composite index içindeki ilk sütun dışında kalan sütunlar, --Koşul verilmiş computed sütunlar, --Image, text ve ntext veri tiplerine sahip olmayan sütunlar.
  • 22.
    Otomatik Olarak Oluşturmakİçin: Veri tabanı üzerinde sağ tuşa basılarak Properties seçeneğine tıklanır ve gelen iletişim kutusundan Options sayfasına geçilerek, Auto Create Statistics değeri True yapılır. Varsayılan olarak bu zaten True değerindedir. Otomatik Statistics devreye sokulduğu zaman, index sütununda bulunan veriler ve index'siz sütunlardan JOIN veya VVHERE ifadesi kullananların istatistikleri, otomatik olarak oluşturur
  • 23.
    UPDATE STATİSTİCS UPDATE STATİSTİCSkomutu ile manuel olarak, Statistics güncellenebilir. Aşağıdaki durumlarda istatistiklerin güncellenmesi gerekebilir; -- Tablo içine herhangi bir kayıt girmeden önce index oluşturulacaksa, --Tablo truncated ise, --Çok az aynı tür veri içeren birçok kayıt, tabloya ekleniyorsa.
  • 24.
    Sonuç - Özet Index’i SQL Server’ın beygir gücü olarak tanımlayabiliriz. Etkin index kullanımı verinin sorgulanması ihtiyacını daha etkin bir şekilde karşılamak için göz önünde bulundurulması gereken en önemli konudur  Clustered ve NonClustered Index’lerin davranışları farklı olduğu için bu 2 index tipi arasındaki farkı bilmek Index oluşturma açısından önemlidir.  Index’lerin B-Tree yapısının ne şekilde çalıştığı bir diğer önemli konudur.  Index’lerin tanımlanmış olması, sürekli performanslı bir çalışma getireceği manasına gelmez. Periyodik olarak Index’lerin bakımının yapılması Index performansına etki eden önemli faktörlerden biridir.  Index kullanımı çok önemliyken, gereksiz,kullanılmayan Index’leri sistemde bulundurmak bir o kadar dezavantajdır. Periyodik olarak kullanılmayan ya da yazma istatistiği okuma istatistiğinden fazla olan index’lerin belirlenip drop edilmesi gerekir  Aynı şekilde olması gerekipte olmayan index’lerin (Missing Index)
  • 25.

Editor's Notes

  • #9 Setup Support Rules’un hemen arkasından gelen Setup Role ekranında kurulumun tipini seçebilmekteyiz.
  • #11 Setup Support Rules’un hemen arkasından gelen Setup Role ekranında kurulumun tipini seçebilmekteyiz.