"Vatanını en çok seven, görevini en iyi yapandır."


Hoş Geldin, Ziyaretçi!

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı yada giriş yapmalısınız. Forum üye olmak tamamen ücretsizdir.

  • Yeni üyeler Neler Yapmalı, Nasıl Başlamalı? Detaylar için tıklayın
    Rütbeler ve genel görevlendirme konuları hakkında bilgi almak için tıklayın
    Uzmanlık alanları hakkında bildirge için tıklayın
    Güncel forum kuralları için tıklayın

İndeks

Katılım
7 Eki 2018
Mesajlar
844
İndeksler - TeŞK!LaTc

İ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.
•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
•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)

•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.
•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)
•Tablo oluşturulurken (Create table)
•Örnek:
•create table eng_tur (
kelime TEXT,
anlami TINYTEXT,
Index(kelime))
•Örnek 2 :
•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.


•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`)

İ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);
•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));


Please, Giriş yap or Kayıt ol to view URLs content!
 
Son düzenleme:
Üst