İndeksler Sibel SOMYÜREK
İndeks nedir? İndeksler, Tablo ya da view üzerinde tanımlanırlar. kitapdaki fihrist(index) yapısı gibi belirli bir değeri olan satırları daha hızlı bulmak için kullanılan bir veritabanı nesnesidir. Tablo ya da view üzerinde tanımlanırlar.
İndeks nedir? Sorgu optimizasyonunda sıklıkla aranan alanlara index atama önemli bir yöntemdir. İndex olmaksızın bir tablodaki belli bir veri aranırken tüm tablo baştan sona aranır. Wikipedia- tüm makaleleri aramak Başlık seçip aramak
MYSQL’de indeks türleri Primary key Unique indeks Fulltext
MYSQL’de indeks türleri Primary key: benzersiz veri, her tabloda en fazla bir tane tanımlanabilir, boş olamaz Unique: benzersiz veri, birden fazla olabilir, boş olabilir, İndeks: tekrarlayan verilerde Full text: Full text index metin eşleştirmelerinde kullanılır. Like içeren aramalar
Örnek Create table kiralama( kira_id int(11) not null auto_increment, kira_tarihi datetime not null, envanter_id mediumint(8), musteri_id smallint(5), donus_tarihi datetime, calisan_id tinyint(3), son_guncelleme timestamp, Primary key (kira_id), Unique key ‘kiratarihi’ (kira_tarihi, envanter_id, musteri_id), Key ‘kiralama_envanter’ (envanter_id), Key ‘kiralama_musteri’ (musteri_id), Key ‘kiralama_calisan’ (calisan_id) )
Örnek Unique key ‘kiratarihi’ (kira_tarihi, envanter_id, musteri_id), Kiratarihi isimli anahtar birleşik bir anahtır. (birden fazla alan içerir) Gerçek hayatta aynı müşteri aynı envanteri aynı tarih saatte birden fazla kiralayamaz. Aslında bu üç alan doğal birincil anhatdır. Ancak kira_id birincil anahtarın daha küçük olması amacıyla oluşturulmuştur.
Örnek Farklı depolama motorları birincil anahtarı farklı kullanır. Innodb motoru birincil anahtarı her indekste her kayıtla birlikte saklar.
İndeks Mysql bir ya da birden fazla alanın indeks olarak tanımlanmasına imkan verir. Where, like, max, min gibi komutların kullanıldığı alanlar Sıklıkla arama yapılan alanlar
Kısıt- indeks Create Table: CREATE TABLE `film_text` ( ) `film_id` smallint(6) NOT NULL, `title` varchar(255) NOT NULL, `description` text, PRIMARY KEY (`film_id`) )
Kısıt-indeks Kısıtlar (primary key ve unique key) benzersiz kayıtlar içerdikleri için veriyi aramayı hızlandırabilecek iyi birer index adayıdır. Primary key ve unique key tanımlandığındığında mysql veritabanında indeksler otomatik olarak oluşturulur. Her ne kadar kısıtlar ve indexler birbirlerinden oldukça farklı olsa da mysql de primary key ve unique key hem key hem de indeks olduğu için key kelimesi her ikisi için de kullanılmaktadır.
Avantajı-Dezavantajı İndex olan bir alanda ekleme, güncelleme silme işlemleri yapıldığında indexte değişmek zorundadır. Bu şu anlama gelir: veri arama hızlanırken veri güncelleme yavaşlar. Veri güncellenirken önce kısıtlara bakılır, kısıtlar gerçekleştiyse indeksler güncellenir.
İndeks Oluşturma Yöntemleri İndeksler 3 şekilde oluşturulabilir: Tablo oluşturulurken (Create table) Tablo değiştirilirken (Alter table) İndeks oluşturarak (Create index)
İndeks Oluşturma Yöntemleri Tablo oluşturulurken (Create table) Örnek: create table eng_tur ( kelime TEXT, anlami TINYTEXT, Index(kelime))
İndeks Oluşturma Yöntemleri Tablo oluşturulurken (Create table) Örnek: create table eng_tur ( kelime TEXT, anlami TINYTEXT, KEY ‘indekskelime’ (kelime))
Fulltext Index Sadece MYISAM tablolarında geçerli MYSQL INNOdb depolama motoru kullanılır. Bu nedenle fulltext indeks oluşturulduğunda hata verir.
Full text indeks Hata «The used table type doesn't support FULLTEXT indexes» ALTER TABLE film_text2 ENGINE = MYISAM
İndeks oluşturma- Full text CREATE TABLE `film_text2` ( `film_id` smallint(6) NOT NULL, `title` varchar(255) NOT NULL, `description` text, PRIMARY KEY (`film_id`), FULLTEXT KEY `idx_title_description` (`title`,`description`) )
MYISAM kayıt motoru ile tablo oluşturma CREATE TABLE `film_text4` ( `film_id` smallint(6) NOT NULL, `title` varchar(255) NOT NULL, `description` text, PRIMARY KEY (`film_id`), FULLTEXT KEY `idx_title_description` (`title`,`description`) )ENGINE = MYISAM
İndeks Oluşturma Yöntemleri İndeks oluşturarak (Create index) ile Unique Fulltext ve Spatial indeksler sadece oluşturulabilir. Örnek: CREATE INDEX idx_partial ON customer (name(10)); CREATE UNIQUE INDEX idx_1 ON TEST1 (name);
İndeks Oluşturma Yöntemleri Tablo değiştirilirken (Alter table) Örnek: ALTER TABLE customer ADD INDEX idx_partial(name);
Tekrarlayan indeks Aynı alan için tekrarlayan indeks oluşturma hata vermez ancak performansı azaltır.
İndeksi kaldırmak İndeksi kaldırmak için: DROP INDEX indeksname ON tabloname Örnek: DROP INDEX idx_partial ON customer;
İndeks Sırası Btree indeksler sadece artan sırada sıralanır. Mysql veritabanı indeksleri sadece artan sırada depolar. Aksi belirtildiğinde hata vermez ama aslında bunu gerçekleştirmez. Örnek: Alter table customer ADD index(first_name DESC) DESC iadesini MYSQL göz ardı eder.
İndeks uzunluğu Metin türündeki indekslerde indeks değerinin uzunluğunu belirtebilirsiniz. Maksimum indeks metin uzunluğu 45 karakter olabilir. 182 byte olabilir. Örnek: CREATE INDEX idx_partial ON customer (name(10));
Okuma görevi Kayıt motoru hakkında aşağıdaki web sayfasında yer alan bilgileri okuyunuz. http://tr.wikipedia.org/wiki/MyISAM