Merhaba Arkadaşlar,

Bu ve bundan sonraki birkaç yazımda sizlere SQL Server Veri tabanları için çok önem arz eden Index kavramını detaylı bir şekilde anlatmaya çalışacağım. SQL Serverda kullanılan Indexler ve bunların örneklerini yine ekran görüntüleriyle sizlere anlatacağım. Veritabanı açısından Index in anlamı Milyonlarca kayıt içerisinde aranan kaydın çok kısa sürede bulmaya çalışmaktır. Bunun nasıl gerçeklendiğine örnek çıktılarla hep beraber bakalım.

SQL Server veritabanında Index kullanımı en çok performans, hız ve bellek tasarrufu gerektiren ortamlarda ortaya çıkar. Milyonlarca yada Milyarlarca kaydın olduğu bir tabloda bir kaydı Index kullanarak daha az kayıt okuyup daha kısa sürede arayıp bulabiliriz. Şimdi Index kullanımını günlük hayattan kütüphane örneğini vererek daha net anlamanızı sağlamaya çalışacağım.

Örnek Senaryo: Üniversitenin 3 Katlı Kütüphanesinde yaklaşık 100.000 kitap olduğunu varsayalım. Ben bir kitap arıyorum, kitabın adını yazarını biliyorum fakat 3 katlı kütüphanede ki kitap rafları ve kitaplar rastgele yerleştirilmiş. Bu durumda ben aradığım kitabı bulmam için neredeyse tüm kitaplığı taramam lazım. Yapay zeka alanında bu durum için Körüne arama metodu denmekte, Veritabanı kavramlarında ise bu yöntem Full Table Scan olarak adlandırılır.

Bahsettiğim bu örneğin ne kadar Saçma ve Zahmet verici olduğunu anlamışsınızdır. Bu yönteme aslında yöntem bile denilemez ve kimse tarafından da kullanılmaz. Peki şimdi bu yöntemin tersini ve doğru olan senaryoyu yazalım. Yukardaki Senaryo Index kullanımı olmayan Veritabanları için örnek bir senaryo olarak kullanılmıştır.

Doğru Senaryo ise şu şekilde olmalıdır. Kütüphanenin 3 katında da bulunan tüm raflar Harf sırasına göre yada Belli bir sayı dizisiyle dizilebilir. Harf sırasına göre dizersek Alfabemizde 29 harf bulunduğuna göre her kata ait 10 harf verilecek. Ayrıca her kata ait 10 harf o katta bulunan raf sayısına göre de bölüştürüldüğü zaman arama çok kolaylaşacaktır.

Bir öğrenci Atatürk’e ait olan Nutuk kitabını aramak istediği zaman N harfinin bulunduğu kata direk gidecek. Dolayısıyla 2 katı eleyerek N harfinin bulunduğu kata gidiyoruz burdan da N harfinin bulunduğu Raf veya Raflara yönelip ordan kolayca Nutuk kitabını buluruz. Bu bahsettiğim mantıklı ve doğru olan metod ise SQL Server veritabanları açısından Index kullanımı için kullanılan senaryodur.

Yukarıdaki senaryodan da anlaşılacağı üzere Doğru bir şekilde oluşturulan Index veritabanı içinde bulunan milyonlarca kayıt içerisinde aramış olduğumuz kaydı çok kısa sürede getirip aramayı yapan kişiye kolaylık sağlarken aynı zamanda daha az kayıt okuyarak hedef kayda ulaştığımız için işletim sistemi kaynaklarını da efektif kullanmış oluruz. Şimdi işin biraz teknik kısmına girerek Index in nasıl çalıştığına bakalım böylece Index mantığını daha iyi kavramış olacağız.

Indexlerin Çalışma Şekli

Index lerin çalışma şekli Programlama dillerinde çokça kullanılan Veri yapılarının en önemli konularından birisi olan Ağaç mantığıdır. Tree olarak adlandırılan bu yapının çok çeşidi olmasına rağmen biz burada SQL Server ın kullanmış olduğu B-Tree (Balanced Tree –Dengeli Ağaç) yi inceleyeceğiz. B-Tree için örnek bir görünüm aşağıdaki gibidir.

Veri yapılarından da bildiğimiz üzere Tree yapılarının en üstünde Root yani kök bulunur. Root un hemen altında genelde bir veya birden çok Intermediate level dediğimiz ara katmanlar bulunur. Eğer Intermediate level diye gördüğümüz katmanın altında bir katman yoksa bu durumda Intermediate level leaf yani yaprak olarak adlandırılır. Root-leaf kavramı yine programlama kavramları içindeki parent-child ilişkisiyle benzer ilişkiye sahiptir. Şimdi canlı bir örnek yaparak Index kavramının dayandığı B-Tree mantığını daha rahat görelim. 1 den 200 e kadar numaralandırılmış olan kutu kümesi içinde 150 numaralı kutuya ulaşmak istiyoruz. Eğer Index kullanmadan arama yaparsak 1 den 150 ye kadar tüm kutuların numarasına bakılarak bumu değil mi diye bilgisayar sorgulaması gerekir. Ancak aşağıdaki görüntüde ki gibi B-Tree olarak sıralayıp aradığımızda daha kısa sürede buluruz.

Yukarda ki gibi 150 ye baktığımız zaman 28 okumada 150 numaralı kutuyu buluyoruz. Önce 150 numarayı kökteki 1 nolu kutuyla kıyaslıyoruz ve sağdaki 2 nolu kutuya geçiyoruz. Burdan tekrar kıyas yapıp sol taraftaki 3 nolu kutuya geçiyoruz son olarak tekrar kıyas yapıp sağ taraftaki 4 numaralı kutuda 150 numaralı kutuyu arıyoruz.  4 numaralı kutuda 25 kayıt içinde 150 numaralı kaydı bulmaya çalışıyoruz. Önceki örnekte 150 okuma ile bulduğumuz kaydı bu defa 28 defa da buluyoruz. Hem belleği yormuyoruz hemde hızlı bir şekilde istediğimiz kayda erişiyoruz. Şimdi Türkiye Cumhuriyeti Vatandaş tablosunu hayal edelim ve bu tabloda Mehmet Salih Deveci kaydını arayalım. M harfine kadar bütün harfleri es geçip aşağıdaki gibi direk M harfine yöneliyorum. Böylece M harfine kadar olan milyonlarca kaydı okumadığımız için daha kısa sürede aramayı tamamlıyoruz.

Index Çeşitleri

Genel itibariyle Index çeşitleri aşağıdaki gibidir.

Biz bunlardan en önemli olan Clustered Index ve Non-Clustered Index leri önümüzdeki yazılarda detaylı bir şekilde inceliyor olacağız.

Son olarak şunu belirtmek istiyorum. Veritabanı üzerinde gereksiz yere Index kullanımı zararlı olabilir. Bunu performans açısından efektif kullanmak çok önemlidir. Örneğin Veritabanı üzerinde çok sık kullanılmayan yada Okuma oranı yazma oranından çok çok düşük olan Index lerin silinmesi performans açısından daha yararlı olacaktır.

Tersi durumda ise Veritabanı üzerinde bir  tabloda çok sayıda okuma yapılıyor ve datalar çoğunlukla sabitse böylesi bir durumda da Index kullanmak performans açısından çok gereklidir.

Böylece bu yazımın sonuna gelmiş bulunmaktayım bir sonraki yazımda SQL Server da Index konusuna devam edeceğim. Tekrar Görüşmek ümidiyle Esen Kalın…

Mehmet Salih Deveci

Veritabanı Yöneticisi

Reklamlar

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Connecting to %s