Monday, June 8, 2009

PLAN AÇIKLAMALARI TABLOLAR VE İNDEXLER ÜRERİNDEKİ İŞLEMLER

Başlık tam olmadi ama burada

Table Access Full (tam tablo taraması)

*Tablodaki satrların tümünü okur bu işlem.

select * from aliates gibi aliates tablosundaki bütün satirlari okur.

Table Access By Index Rowid performansı arttırmak için satirlar ROWID (fiziksel konum adresi) kullanarak erişir. ROWID ile ilişkilendirilmiş bir index kullanılması denilebilir.

basit bir index yaratalim ve bunun çalişma mekanizmasını anlatalım.

create index alinin_adi_indeksi on aliates(adi)

tablespace indexes;

burada aliates tablosunun adi sütününa alianin_adi_indeksi isminde bir index oluşturduk.

bu tablo üzerinde select * from aliates where adi =’rafet’;

dediğimiz zaman Index Unique Scan ile aliates tablosu üzerindeki adi sütünü izerindeki indexlere erişilecek ve rafet e karşilik gelen ROWID ler döndürülecektir. Bunun ardindan Table Access By Index Rowid işlemi ile o ROWID lere ait kayitlar döndürelecektir.

INDEX RANGE SCAN Bir aralık sorgusunda mesela LIKE bunu kullanır

like ‘%bu index kullanmaz%’ sütün içerisinde like ile değer aralığı belirtildiğinde ve ilk karakter herhangi bişey olabirir (%) durumunda index kullanılmaz (???)

*sütün üzerinde fonksiyon kullanılması index kullanımını engeller en güzel ve genek örnek UPPER fonksiyonu olabilir. Bu olaya çözum getirmek için fonksiyon tabanlı inexler kullanılabilir.

*Index lenen sürün üzerinde null değerler var ise bunlar indekslenmeyecektir. NULL değerler indekslenmez. neye göre indeksleyecek zaten. Null değer İçeren bir sütün üzerinde index kullanılmaya çalışıldığında indeks mekanizması çalışmayacaktır. full table scan yapacaktır.

*Index ler üzerinde != işlemi kullanmak zordur. = ifadesini kullanabilir ama eşit değili kullanamaz bunun yerine Full Table Scan yapar. O kadar indeksi tarayarak eşit olmayanı bulmak gerçekten zor bir işlem gibi görünüyor.

* MIN ve MAX fonksiyonlarında indeksler etkilidir.

No comments: