Oracle Kavramlari - Indeks
Oracle Veritabanında indeksleri anlamak
İsin abc sinden baslarsak once blok kavramina kisaca bakalim. Sabit disk uzerinde Oracle in yazma okuma yapabilecegi en kucuk alan olup tum Oracle veritabanı nesneleri( tablo, indeks, cluster vb) bloklar uzerinde saklanirlar. Blok buyuklugu her veritabani icin yapilandirilabilir olmakla beraber genelde 4,8,16 veya 32kb degerlerinden birini alir. Veritabanlarinda bir satirin tum sutunlarin istisnalar haric tuttugu alan genelde bir blok alanından buyuk olamayacagi icin bir tek blok icine tablonun bircok satiri sigar. Oracle bu yuzden hicbir zaman sadece bir satiri okuyamaz, en azindan bir blogu okur, aradigi satiri bulur ve digerlerini ihmal eder. Oracle indeksleri genel olarak iki mimari uzerine kurulmustur : b-Tree ve bitmap. Bildigimiz tum diger indeks tipleri bu iki mimari uzerine kurulmustur. Bitmap indekslere daha sonra donmek uzere simdi b-Tree indekslerin detayına girelim.
Agac formunda bir veri yapisi olan b-Tree tipi indeks , veritabanı bloklarından olusan bir agactir. Bu indeks agacinin dallarinin ucundaki her yaprakta bloklar bulunmaktadir. Simdi bir telefon fihristini dusunerek Balanced tree kavramini somutlastiralim. Bu agacin dallarinin ucundaki her blok fihristin bir sayfasidir. Her sayfada bir den isim, telefon ve adres bilgisi bulunur tipki blogun birden cok satir icermesi gibi. Isim, address ve telefondan olusan bu satirdaki isim aradigimiz indekslenmis sutun degerine tekabul edip kisinin bulundugu yer olan adresi de ROWID dir. Fihristin her sayfasindaki isimler alfabetik olarak yukaridan asagiya siralanmislardir. Fihristte D ile baslayan kisilerin bulundugu sayfaya ayirac yardimiyla gideriz ve yukaridan asagiya tarayarak ornegin Demir isimili kisinin iletisim bilgilerini ulasiriz. Bu siralama sayesinde tum sayfayi bastan sona okumadan bastaki isimlerin yani indekslenmis sutunlarin alfabetik siralanmasindan yararlanarak hizlica aradigimiz ismi buluruz. Ama veritabani burada bizim yaptigimiz gibi satiri okuyamayaz, D ile baslayan kisilerin bulundugu tum sayfayi yani blogu okumak durumundadir.
Eger fihristte ayirac olmasaydi soyle bir sayfa olmak zorundaydi: Her sayfanin basindaki yani ilk satirindaki isim ve bunun bulundugu sayfa. Sayfa 3- Adem Sayfa 7- Bahri Sayfa 25-Cem gibi. Iste bu sayfa B-Tree deki dallarda bulunan bloklara tekabul etmektedir. Dal blogu icinde bir blok adresi ve o adresteki blogun ilk basindaki satirin bilgileri bulunmaktadir. Yeni veri geldikce dal bloguna bagli baska bir dal blogunun acilmasi sadece satir degerlerinin olusacak yaprak bloguna kadar devam eder.
B-Tree yapisindaki fihristte Galip ismini bulunmasi- Sayfa 1: Dal Blogu(isim ve bu isimle baslayan sayfanin numarasi ) : (Sayfa 6 Ferit) , (Sayfa 7 Hayri)
- Sayfa 3: Dal Blogu(isim ve bu isimle baslayan sayfanin numarasi ) : (Sayfa 300 Furkat) , (Sayfa 301 Gaye)
- Sayfa 300: Galip isminin bulundugu yaprak Blogudur. Aydin ismi icin gidilecek baska bir dal blogu yoktur.
Oracle da indeksleri cesitli saklama ayarlari ve yerlesecegi tablespace i vererek(explicitly) veya vermeyerek tanımlayabiliriz. Eger bu parametreler verilmeden yaratilirlarsa varsayilan saklama secenekleri kullanilarak ve varsayilan tablespace uzerinde yaratilirlar. Essiz indeksler birincil anahtar kisiti ile iliskilendirilen sutun veya sutunlarda ayni degeri tasiyan iki satirin olmamasını garanti ederler. Aksine essiz olmayan indeksler de satir essizligini sunmazlar. Oracle veritabani tablo uzerindeki UNIQUE veya PRIMARY KEY tutarlilik kısıtlarinin tanımlanması durumunda her biri icin essiz bir indeks yaratir. Tablonun sutun veya sutunlari icin daha onceden tanimlanmis UNIQUE kisitini gecici olarak gecersiz kilmak ve daha sonra kaldirilmasindan bu yana girilen satirlardaki sutunlar icin essizligini kontrol etmeden UNIQUE kisitini tekrar devreye almak istiyorsak kullanilmasi gereken indeks tipi essiz olmayan olmalidir.
Aslinda Oracle indekslenmis herhangi satirin yerini bulabilmesi icin her durumda essiz olmayan indeksleri essiz indekslere cevirmektedir. Satirin ROWID isi indeks satir kayıdına ek bir sutun olarak eklenerek essiz olmayan indeks arkaplanda essiz hale getirilmis olur. Boylece indeks yapisi icinde uygun sirada ve pozisyonda indeksi saklamak icin gereken essiz indeks satir kaydi olusturulmus olur. Eger satirin sutununa gireceginiz verinin essiz olmasi gerekiyorsa bu sutun icin UNIQUE kisitini tanimlayin , Oracle sizin icin indeksi yaratacak ve caresine bakacaktir. Eger kisitinizi NOT DEFERRABLE olarak yarattıysanız Oracle in yaratacagi indeks essiz aksi durumda zaten essiz olmayan tipte olacaktir.
- Oracle Archived Redo Logs Oracle veritabaninda yapilan herhangi bir degisiklik o...
- Oracle Kavramlari - Segment Oracle veritabininda segment veritabani nesnelerin...
- Oracle Veritabani BloklariSerbest bloklar HWM isaretinin altinda kalan bloklar o...
No comments :
Post a Comment