Son Haberler
Anasayfa / Yazılım / SQL / Index nedir, ne işe yarar?

Index nedir, ne işe yarar?

SQL üzerinde bir veritabanı üzerinde bir tablo üstünde bir kullanıcın bir sorgu yani bir query oluşturduğunu düşünün. Bu sorgu sonucunda veritabanınan bir takım verilerin geriye dönmesi gerekecektir. Peki burada hangi verilerin geri döneceğine sql server nasıl karar veriyor? Bunu nereden biliyor?

Burada tabi sorgu deyimimizde belirttiğimiz şartlar önemli. Yalnız şunu belirtmek gerekir ki indexlenmiş bir tablodan index numarası ile veri çekmek bir LIKE deyimi ile veri çekmekten daha performanslıdır.

SELECT Ad FROM Ogrenciler WHERE Ad LIKE a%

Böyle bir sorgu çektiğimizde SQL server tablo üzerindeki her satırı tek tek aramaya başlar. Ve bize ilgili tabloda Ad kolonu a harfi ile başlayanları listeler.

Indexleme yöntemi olması durumunda SQL server önce bir indeks olup olmadığına bakar. Olması durumunda sorgunun daha hızlı çalışması söz konusudur. Tıpkı bir kitap gibi, bir kitabın indeks bölümünden arama yaparsınız ve istediğiniz kısmın sayfasını buradan daha hızlı bulursunuz. Eğer bir indeks yapısı olmazsa bir kitapta aradığınızı bulmak için tüm kitabı incelersiniz.

İki tip indeksleme yöntemi vardır. Clustered ve non-clustered. Clustered kümelenmiş, sıralanmış anlamına gelirken, non-clustered kümelenmemiş, sıralanmamış anlamlarına gelmektedir. Clustered index yapısına sahip bir tabloda sıralı olarak satırlar devam etmektedir. Non-clustered ise biraz daha farklı bir yapıdır ve burda sıra ile satırların devamlılığı yoktur. Peki neden indeks yapıyoruz, tekrarlı satırlara sahip verilerin olmaması amacı ile. Bir önceki yazımı okuyanlar görmüşlerdir. Her tablom için bir ID atamam sıralı olarak verilerimin hem düzenli olmasını sağlar hemde tekrarlı veri durumunu engeller. Bir tablo yalnızca tek bir clustered index yapısına sahip olmalıdır.

Şimdi bir telefon defterini düşününüz. İçerisinde Ad, Soyad ve Telefon bilgisi yer alır ve bu bilgilerin oluşturduğu her yapı bir tablonun satırı gibidir. Telefon defterinde bir arkadaşımızı nasıl ararız. Örneğin adı İsmail ise İ sayfasına gideriz orada İsmail’i ararız. Adı Yaşar ise Y harfine gideriz orada ararız, Zeynep ise Z harfine gideriz orada ararız. İşte bu Clustered indeks için iyi bir örnektir.

Non-clustered ise üstte belirttiğim gibi bir kitabın arka sayfası gibidir. Kitabın arka sayfasında aradığınız konu ile ilgili olarak indekse bakarsınız daha sonra sayfa numarasını öğrenip ilgili sayfaya gidersiniz. Yani non-clustered indeks yapısı aslında bir nevi işaretçi yapısı gibidir. Aynı mantık arama motorlarında bir konuyu aradığınızda da geçerlidir. Örneğin Google üzerinde İsmail GÜRSOY (çok bencilim biliyorum :), varsın bencillik böyle olsun, bilgi paylaşıyoruz ne bencilliği diyelim, akla önce adım soyadım geliyor :)) diye arama yaptığınızda Google size ilgili arama sonuçlarını getirir. Daha sonra siz bu linklere tıklarsınız ve asıl veriye ulaşırsınız. Yani burada bir işaretleme mantığı vardır ve burada oluşturulan sırada non-clustered bir yapıdır diyebiliriz.

Bir tabloda yalnızca bir adet Clustered index olabilir. Buna karşın bir tablo üzerinde 999 adede kadar non-clustered index bulunabilir. Zaten bu kadar non-clustered index kullanıyorsanız veya bu kadar ihtiyacınız varsa bi şeyler yanlış gidiyordur 🙂 Normalizasyon hususunda çalışınız derim ben 🙂

Bir diğer önemli nokta indexler sorgu performansını arttırabilirler ancak ek veri alanına ihtiyaç duyarlar. Örneğin bir tabloda 5 non-clustered olursa her veri için ekstra 5 birim alan veri saklama alanına ihtiyaç duyulur.

4 yorum

  1. paylaşım için çok teşekkürler üstad

  2. Bilgiler için sağ ol ve ne bencilliği tabi söyleyecen adını :))

  3. Sen var ya adamsın adam güzel paylaşım.

  4. Gerçekten çok başarılı olmuş. Kitap arasındaki indeks örneği ile unutmam 😀

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir