Index Yapısı
Sql komutlarından index oluşturma ve faydaları, myadminde gösterimi
İNDEKS OLUŞTURMA ve KULLANMA
İndeks Oluşturmanın Amacı
Bir indeks, veri tabanı ortamında bir tablo ya da bir view gibi bir nesnedir ve ilişkili olarak kullanıldığı tablo ya da view’deki satırların, indeksleme alanı (key field (anahtar alan)) olarak kullanılan kolondaki verilere göre sıralanmış biçimde işleme sokulmasını (listeleme ya da arama işlemi) sağlar.
Bir tablo, indekslenmiş ise, bu tablo içinde gerçekleştirilecek bir arama (search) ya da koşullu listeleme (SELECT komutu ile) işlemi çok daha hızlı biçimde gerçekleştirilebilecektir.
İndeks Yaratma
SQL’de bir tablo ile ilşkili olarak indeks yaratmak için gerekli komut CREATE INDEX komutudur. Komutun yazılış biçimi aşağıdaki gibidir:
CREATE INDEX indeks adı
ON tabloadı (kolonadı 1,kolonadı 2,....,kolonadı n );
İndeksleme artan (ascending) ya da azalan (decending) şeklinde olabilir. Artan, alfabetik olarak A’dan Z’ye nümerik olarak küçükten büyüğe şeklindedir. Azalan ise bunun tersidir. Hiçbir özel sözcük kullanılmazsa indeksleme artan sayılır ya da alan adının yanında bir boşluktan sonra ASC sözcüğü kullanılırsa bu alana göre artan sıralama yapılacak demektir.
Herhangi bir alanın adının yanında DESC sözcüğünün kullanılması ise indekslemenin azalan olacağını gösterir. Komutun yazılış biçiminden anlaşılacağı gibi, aynı anda, birden çok alana göre indeksleme de yapılabilir.
Tek bir alana göre artan sırada indeksleme
İşletmede çalışan personeli maaşlarına göre artan sırada listelemek istersek, maas alanına göre bir indeks oluşturmalıyız.
CREATE INDEX pers_maas
ON Personel (maas);
Index created 127 Rows
127 satırlık personel tablosu ile ilişkili olarak maas alanına indeks anahtarı olarak kullanılan pers_maas adlı indeks oluşturulmuştur. Bu durumda;
SELECT *
FROM Personel;
şeklindeki listeleme komutu sonucunda, personel tablosundaki tüm personel, maaşlarına göre sıralı olarak listelenecektir.
Tek bir alana göre azalan sırada indeksleme
İşletmede çalışan personeli maaşlarına göre azalan sırada (yüksek maaştan düşük maaşa doğru) listelemek istersek, maas alanına göre aşağıdaki şekilde oluşturmak gerekir.
CREATE INDEX pers_maas
ON Personel (maas DESC);
Birden fazla alana göre indeksleme
İşletmedeki personelin öncelikle adlarına göre, aynı ad da olanların soyadlarına göre, hem adı hem soyadı aynı olanların maaşlarına göre sıralanmış olarak listelenmesi istenirse aşağıdaki komut kullanılmalıdır:
CREATE INDEX p_ad_soy_m
ON Personel (ad,soyad,maas);
Bu durumda
SELECT *
FROM Personel;
komutu sonucunda, aşağıdaki şekilde sıralanmış tablo görüntülenecektir.
sicil ad soyad maas
11117 Ahmet Caner 15000000
247 Ahmet Deniz 27000000
645 Ahmet Zoran 12000000
3871 Ali Cenker 26000000
15372 Ali Cenker 34000000
4246 Ali Cenker 65000000
16656 Ali Şener 12000000
7216 Beril Arkan 18000000
Burada, kolayca görüleceği gibi personel öncelikle adı alanına göre sıralanmış (Ahmet, Ali, Beril) aynı ada sahip olanlar soyadlarına göre sıralanmış (Ahmet ismindeki kişilerin soyadları olan Caner, Deniz, Zoran sıralaması gibi), hem ad hem de soyadları aynı olanların sıralanmasında ise maas alanı dikkate alınmıştır.
İndeks komutu
CREATE INDEX p_ad_soy_m
ON Personel (ad,soyad,maas DESC);
şeklinde yazılsa idi, tablodaki değerler
sicil ad soyad maas
11117 Ahmet Caner 15000000
247 Ahmet Deniz 27000000
645 Ahmet Zoran 12000000
3871 Ali Cenker 26000000
15372 Ali Cenker 34000000
4246 Ali Cenker 65000000
16656 Ali Şener 12000000
7216 Beril Arkan 18000000
Kaynak : Burak Taş