Index Yapıları (Create Index);

 

Bir index, veri tabanı ortamında tablo gibi bir nesnedir ve ilişkili olarak kullanıldığı tablonun indexleme alanı (priamry key)  olarak kullanılan kolondaki verilere göre sıralanmış biçimde işleme sokulmasını sağlar. Bir tablo indexlenmiş ise bu tablo içinde gerçekleştirilecek bir arama ya da koşullu listeleme işlemi çok daha hızlı biçimde gerçekleştirilebilecektir. CREATE INDEX belirtilen bir tablo üzerinden bir indeks oluşturur. İndekslerin birincil kullanım amacı veritabanı başarımını arttırmaktır (ancak, uygunsuz kullanımı başarımın düşmesiyle sonuçlanır).

 İndeks için anahtar alanları sütun isimleri olarak ya da parantez içinde yazılmış ifadeler olarak belirtilir. İndeksleme yöntemi çoksütunlu indeksleri destekliyorsa, çok sayıda alan belirtilebilir. Bir indeks alanı tablonun satırındaki bir veya daha fazla sütun değerinden hesaplanan bir ifade olabilir. Bu özellik, bazı temel veri dönüşümlerini temel alan veriye daha hızlı erişim sağlamak için kullanılabilir 

Auto_increment, tamsayı sütunlarında kullanabileceğiniz özel bir MySQL özelliğidir. Tabloya satırlar eklerken ilgili alanı boş bıraktığımızda MySQL otomatik olarak benzersiz bir tanımlayıcı değer oluşturacaktır. Bu değer, sütundaki mevcut maksimum değerleri bir fazla olacaktır. Her tabloda yalnızca bir tane bulunabilir. Auto_increment içeren sütunlar indexlenmelidir.

 

Bir sütun adının ardından gelen primary key, bu sütunun tablo için birincil anahtar olduğunu belirtir. Bu sütuna yapılan girişlerin benzersiz olması gerekir (TC kimlik no, okuldaki öğrenci no gibi). MySQL bu sütunu otomatik olarak indexler. Yukarıdaki müşteri tablosundaki musteri_id ile birlikte kullanıldığında Auto_increment ile birlikte görülür. Birincil anahtar üzerindeki otomatik index auto_increment için gereken indexle ilgilenir.

 

Bir sütun adının ardından birincil anahtar (primary key) belirleme işlemi sadece tek sütunluk birincil anahtarlar için yapılabilir. Birincil anahtarların belirtilmesi bu sütunlarda indexlerin oluşturulmasını sağlar.

 

Birincil anahtarlar ya da indexler olmadan da tablo oluşturmak mümkündür. Yeni başayan MySQL kullanıcılarının karşılaştıkları sorunlardan biri çok hızlı olduğunu duymuş oldukları bu veritabanından yeterli performans elde edememektir. Bu performans sorunuyla karşılaşmalarının nedeni veritabanlarında hiçbir index oluşturmamış olmalarıdır.

 

MySQL tarafından otomatik olarak oluşturulan indexler başlangıç için işimizi görecektir. Eğer anahtar olmayan bir sütunda çok fazla sorgu çalıştırdığınızı fark ederseniz, performansı artırmak için bu sütuna bir index eklemek isteyebilirsiniz. Bunu CREATE INDEX ifadesini kullanarak yapabilirsiniz. Bu ifadenin genel formu aşağıdadır.

  Kullanımı; CREATE [ UNIQUE ] INDEX isim ON tablo [ USING yöntem ]    ( { sütun | ( ifade ) } [ işleç_sınıfı ] [, ...] )    [ TABLESPACE tablo_alanı ]    [ WHERE dayanak ] Parametreler UNIQUE İndeks oluşturulurken ve her veri eklenişinde, tabloda birbirinin aynı değerler bulunmaması için sistemin sınama yapmasını sağlar. Girdilerin yinelenmesine sebep olacak bir veri girme veya güncelleme işleminin yapılmaya çalışılması bir hata üretecektir. İsim       : Oluşturulacak indeksin ismi; burada şema nitelemeli isimler kullanılamaz. İndeks daima tabloyu içeren şemada oluşturulur. Tablo     : İndekslenecek tablonun ismi (şema nitelemeli olabilir). Yöntem : İndeks için kullanılacak yöntemin ismi. Değer olarak, btree, hash, rtree ve gist verilebilir. btree öntanımlı yöntemdir. Sütun     :Tablo sütunun ismidir. İfade      :Tablonun bir ya da daha fazla sütünu ile ilintili bir ifade. İfade yukarıdaki sözdiziminde gösterildiği gibi parantez içinde yazılmalıdır. Ancak, ifade bir işlev çağrısı biçimindeyse parantez içine alınmayabilir. işleç_sınıfı: Bir işleç sınıfının ismidir. Ayrıntılar için aşağıya bakınız. tablo_alanı: İndeksin oluşturulacağı tablo alandır. Belirtilmezse, default_tablespace yapılandırma değişkeninin değeri; bu değişkene bir değer atanmamışsa veritabanının öntanımlı tablo alanı kullanılır. Dayanak :Bir kısmî indeks için kısıt ifadesi.  Örnekler; films tablosunun title sütunu üzerinde bir B-tree indeksi oluşturmak için:

mysql> CREATE UNIQUE INDEX title_idx ON films (title);

films tablosunun code sütunu üzerinde bir indeks oluşturup, bu indeksin indexspace tablo alanında kalması için:

mysql>CREATE INDEX code_idx ON films(code) TABLESPACE indexspace;


mysql>CREATE INDEX namex ON “Depo.Dbf” (malz_adi) İşletmede çalışan personeli brüt maaşlarına göre azalan sırada (yüksek maaştan düşük maaşa doğru) listelemek istenirse, brüt alanına göre aşağıdaki gibi index oluşturmak gerekir. mysql>CREATE INDEX per_maas ON personel (brut DESC); Bir okuldaki öğrencileri öncelikle adlarına göre, aynı adda olanları soyadlarına göre, hem adı hem soyadı aynı olanların ortalamalarına göre sırlanmış olarak (listelenmesi) istenirse aşağıdaki komutlar kullanılmalıdır. mysql>CREATE INDEX ogr_ad_soyad_ort ON ogrenci (ad,soyad,ort); Mevcut Index’in Silinmesi (Index Drop); Bir tablo üzerinde tanımlanmış her hangi bir index, o tablonun veritabanından silinmesi ile otomatik olarak silinecektir. Tablo silinmeksizin, o tablo üzerinde oluşturulan indeksin içinse, DROP INDEX komutu kullanılır. mysql>INDEX DROP ogr_ad_soyad_ort; Böylece ogrenci tablosu üzerinde oluşturulmuş ogr_ad_soyad_ort adlı indeks, ogrenci tablosu veritabanında kaldığı halde silinecektir.