Oracle Ders 12 – Index – Function Based Index

Merhaba Arkadaslar,
Son 2 derstir Oracle 11G de Index konusunu isliyorduk, bu dersimizde Function Based Index yapisini incelecegiz. Bu dersimizde onceki derslerimizde otomatik olarak olusturdugumuz books ve orders tablolarindan yararlanacagiz.

Function Based Index yapisi , hesaplanan degerler (calculated value) uzerinde etkilidir.
Bir kolon uzerinde Function Based yapisinda Index kullanildiginda , diger index yapisi gozardi edilir.

Function Based Index , yapi olarak B Tree Index ya da Bitmap Index olarak tanimlanabilir. Varsayilan olarak B Tree yapisindadir.

Books tablomuzda retail  ve cost alanlari vardir, biz her kitap icin kazancimizi retail-cost olarak bulabiliriz. Bu fonksiyonel ifadeyi , function based index olarak tanimlarsak sorgumuzda retail-cost ifademiz daha hizli calisacaktir.

01 oracle ders 12 Function Based index

create index books_profit_idx
on books (retail-cost);

Function Based Index , NULL degerler uzerindeki sorgularin da performansini arttirir.  Varsayilan olarak , NULL degerler negatif anlamda indekslenmis kolonlardir , ilgili satirin (kayit, row) indekslenmeyecegini belirtir.

Bu problemi cozmek icin Function Based index yapisinda NVL fonksiyonunu kullaniriz. NVL fonksiyonunu ilerleyen derslerde bahsedecegim kisaca deginmek gerekirse NULL kolonlari bizim belirledigimiz bir deger ile degistirmeye yarar.

Orders tablomuzda shipdate kolonu bulunmaktadir ve bazi degerler null dir. Yani dusunelim ki siparis verilmis ama henuz teslim edilmemistir(shipdate) , bu degerler null olacaktir. Bize de siparisin ulasmadigi kayitlar gerekmekte, yani shipdate i null olan.

Orders tablomuzda shipdate kolonu uzerinde B – Tree Index olusturalim.

create index orders_shipdate_idx
on orders(shipdate);
select * from orders where shipdate is null;

Yukaridaki basit sorguda shipdate alani null olan siparislere ait bilgiler getirilmektedir.
B Tree index yapisinin burada bize hiz kazandirmayacaktir. Shipdate alaninin null oldugu kayitlari istiyoruz ve bunun aksine B Tree index yapisi , ilgili kolon icin null deger varsa gozardi edecektir ve indekslemeyecektir. Yani Shipdate kolonunun null oldugu hic bir kayit indekslenmemistir.
Bu durumda sonuclar full table scan sonucu donecektir bu da istenmeyen bir durumdur.

Bu problemin cozumu olarak Function Based Index olusturalim , shipdate kolonu null olan kayitlar gozardi edildigi icin index olusturken NVL fonksiyonu yardimi ile null olan shipdate kolonunu 14 Apr 2013 olarak degistirdim. Boylece tum kayitlarin indekslenmesini sagladik.

create index orders_shipdate_idx_NVL
on orders(NVL(shipdate,'14 Apr 2013'));
select * from orders where shipdate is null;

Sorgumuzda sonuclar artik full table scan olarak degil Function Based Index yapisindan yararlanilarak getirilmektedir. Boylece index yapimiz amacina ulasmis oldu.

Bu dersi de burada noktaliyorum 🙂

Herkese Bol Javali Gunler dilerim.
Be an oracle man , import java.*;
Levent Erguder
injavawetrust

Print Friendly, PDF & Email

Leave a Reply

Your email address will not be published. Required fields are marked *