SQL VE TSQL DERS 25: INDEX YAPISI

Index mimarisi, SQL Serverın veriyi daha performanslı kullanabilmek ve sorgu sonuç hızını arttırmak için kullandığı mimaridir.

SQL Server, herhangi bir performans ve iyileştirme yapmadan da performanslı çalışabilecek şekilde tasarlanmıştır. Ancak, mimari açıdan geliştirilen yöntemler ve performans arttırıcı nesneler ile SQL Serverdan daha yüksek veri alınabilir.

Bu tür iyileştirmelere, geliştiricinin hazırladığı tablo ve veri yapısının SQL Servera doğru olarak tanıtarak verinin daha performanslı şekilde yönetilmesi denilebilir.

  • Bir sistemin diskinin yazma ve okuma hızı standart olarak bellidir. Veri ve log ( .mdf .ldf ) dosyalarının her ikisinde de yazma ve okuma işlemi gerçekleştirilir. Her iki dosyanın da bir disk üzerinde tutulması hem performans hem de güvenlik açısından büyük bir risktir. Disk aynı anda hem ldf hem de mdf dosyalarında yazma ve okuma işlemi gerçekleştireceğinden diskin okuma ve yazma hızı otomatik olarak yarı yarıya bölüşülmüş olacaktır. Bu duruma işletim sistemi ve diğer programların kullandığı yazma ve okuma işlemleride eklenince performans olumsuz anlamda etkilenecektir. Aynı zamanda, iki dosyanın aynı disk üzerinde tutulması güvenlik riskidir. Disk, sistemin çalışma anında herhangi bir sebepten dolayı arıza yaparsa veri ve log dosyası aynı anda kaybedilmiş olunur. Doğru olan, en azından işletim sistemi, veri dosyası ve log dosyası için ayrı ayrı üç farklı disk kullanılması ve ayarların buna göre gerçekleştirilmesidir.

EXTENT

Tablolar ve Indeksler için kullanılan temel depolama birimidir. Yani, veritabanı içinde ayrılan birim alanıdır. 8 adet bitişik 64k’lık veri pagelerinden oluşur.

PAGE

Pageler, extentler içerisinde bulunan, extentlerin birim alanıdır. Her extent içerisinde 8 page bulunur. Her extentteki page sayısı aynıdır. Yani her extent sekizlik sistem ile çalışır.

sql1

CLUSTERED INDEKS

Bir clustered index oluşturmak için tablodaki en yoğun sorgu alması ön görülen ya da istatistikler ile en çok sorgu aldığı bilinen sütunlar seçilmelidir. Genelde tekrarlayan verilerin bulunduğu sütunlar üzerinde veriye erişimi hızlandırmak için clustered index oluşturulur. SQL Server, Indeks ihtiyacını aslında kendisi belirler. Biz öneri olarak bazı indexler oluştururuz. Ancak SQL Server hangi indeksin hangi durumlarda ve ne şekilde kullanacağına kendisi karar verir.

NON – CLUSTERED INDEKS

Clustered indexlerin yardımcıları diyebiliriz. Bir tablo üzerinde sadece bir clustered index tanımlanabilirken non-clustered indexten 999 adet tanımlanabilir.

UNIQUE INDEX

İndeksteki verilerin tekrarını önlemek için kullanılır ve UNIQUE deyimi ile tanımlanır. UNIQUE indeks clustered ya da non clustered olabilir. Bir primary key constraint ya da unique constraint oluşturulduğu zaman, SQL Server ilgili sütun için bir Unique Indeks tanımlar. Örnek: email, tckimlik

create unique nonclustered index UI_Email
on Personeller(Email)

sp_helpindex 'Personeller' -- tablodaki indexleri verir 

alter index UI_Email on Personeller disable -- index'i kapatma kodu
alter index UI_Email on Personeller rebuild -- index'i geri açma kodu

SELECT * FROM sys.indexes -- SQL Serverdaki bütün indexleri verir