Oracle Ders 10 – Index – BTree Index

Merhaba Arkadaslar,
Bu dersimizde Oracle’da index konusunu isleyecegiz.
Index, kitaplarin sonundaki indeks bolumu gibidir, ornegin primary key i aradigimizi dusunursek, siralanmis olan bilgileri hizlica tarayip atlayip aradigimizi cabucak bulabiliriz. Indeks bolumu olmadigini dusunursek, tum kitabi bastan sona taramak zorundayiz demektir.
Benzer sekilde, database index yapisi veri cekmeyi(veriyi bulmayi) cok daha verimli ve etkili hale getirmektedir.

Tablomuzda cok fazla veri oldugunu ve yogun bir sorgu (where condition), siralama  (order by ve join ) islemi gerceklesiyorsa bu durum , sorgulara verilen cevabin gec donmesine neden olabilir.

Oracle 11 g ‘ de yeni bir tablo olusturdugumuzda heap-organized table yapisinda bir tablo olusturur ki bu sirasiz bir yapisi vardir.
Tabloya kayi eklendiginde , fiziksel olarak ozel bir siralama olmaksizin eklenir. Kayit silindiginde, bos alan diger bir kayit ile doldurulabilir.

Bir select … where zip_code=90404 sorgusunu dusunelim ,tablo bastan sona taranacaktir. Buna full table scan denir , her kayit tek tek okunur ve zip_code alani kontrol edilir. Tablomuzda bir kac milyon kayit oldugunu dusunursek gecikme ve zaman problemi olacaktir.

Not: Cardilanility (selectivity) , kavrami aciklayacak olursak.
10 milyon veri olan tablomuzda birbirinden farkli farkli bir cok cesit zip_code degeri oldugunu dusunelim  ve ornek olarak zip_code degeri 90404 olan sadece 100 tane kayit oldugunu dusunursek bosu bosuna 9 kusur milyon kaydi okumus oluruz. Bu sekilde olan column (sutun) icin high cardinality e sahip olarak ifade edilir.

Index yapisi sorgulamalarda etkili bir verimlilik saglarken , uygun sekilde kullanilmamasi daha fazla probleme neden olabilir.

Oracle 11 G deki index yapilarini inceleyecek olursak..

B -Tree Index

B(Balanced) -Tree Index , Oracle da en cok kullanilan index cesididir.

Resimde B-Tree yapisini gormektediyiz. En tepedeki root(kok), en alttakiler ise leaf (yaprak) ve arasinda kalanlar branch(dal) olarak adlandirilir.

binary tree1

Oracle 11G , B-Tree index yapisini kullanmaktadir. Bir kolon icin index olusturdugumuzda kolon degeri ve o verinin bulundugu satir bilgisi (ROWID) bu agacta uygun bir yere yerlestirilir. 
ROWID,
verinin fiziksel adresidir. Leaf seviyesinde ya tek bir deger olur ya da bir deger araligi bilgisi tutar ve siralidir. Leaf seviyeler birbirine bagli-liste mantigina gore baglidir.

90404 u B-Tree yapisi olmadan sira ile aradigimizi ve yukaridaki B-Tree yapisinda daldan dala atlayarak aradigimizi dusunursek aradaki zaman kazancini tahmin edebiliriz.

Oracle 11 G, bir kolon icin primary key veya unique kisitlamasi olusturuldugunda otomatik olarak index olusturur.  Aklimiza soyle bir soru gelebilir peki tum kolonlar icin index olustursak?

Index yapisi dogru kullanilmadiginda hizin aksine yavasliga neden olabilir ;

  • Eger , DML (Database Manipulation Language) islemlerini (insert, update, delete) yogun olarak gerceklestiriyorsak bu durum yavasliga neden olabilir, cunku Oracle 11 G tabloda bu islemleri yaparken index uzerinde de islem yapacaktir.
  • Bir tablo 10 tane index e sahipse , 10 index de birbirinden ayri bir sekilde guncellenecektir.
  • B-Tree Index’ ler tipik olarak tablodan az bir sonucla donecek olan sorgular icin etkilidir. Kayit sayisinin az oldugu tablolar icin full table scan islemi index yapisindan daha hizli olabilir.
  • Daha fazla storage alani gerekir cunku indexler bir database objesidir.
  • DML islemleri , sorgu islemlerinden daha fazlaysa ve oncelik olarak DML performansi daha yuksekse kolonlar icin index olusturma islemi minimize edilmelidir.

Bu kadar bilgiden sonra simdi de bir B-Tree index olusturalim…

Oncelikle yeni bir tablo olusturalim ve uzerinde calisalim…

create table ders10 ( 
id number ,
city varchar(20),
zip_code number
);

tablomuzu olusturduktan sonra zip_code kolonu icin bir index olusturalim.

create index ders10_zip_code_idx
on ders10(zip_code);

Index olustururken birden fazla kolonu da verebiliriz, bunlara composite / concatenated index denir. Genel olarak composite indexler , kolonlar icin ayri ayri index yapmaktan daha verimlidir, cunku tekil bir index’i daha az I/O (input/output) gerektirir.
Not: Bir composite B-Tree index en fazla 32 tane kolon alabilir. Composite B-Tree index olustururken High Cardinality ozelligi en yuksek olan kolonu ilk sirada yazmak verimliligi arttiracaktir.

create index ders10_composite_idx on ders10(id,city);

Son olarak olusturdugumuz indexleri SQL Developer programimizda gorelim

oracle_ders_10_index

Bu dersimiz de burada son bulmaktadir. Bir sonraki derste Oracle 11 G deki diger index konularini isleyecegiz.

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 *