İndeks - Sibel SOMYÜREK

advertisement
İndeksler
Sibel SOMYÜREK
İndeks nedir?
• İndeksler,
• 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
Download