7 – Oracle Index’leri

Oracle Eğitimleri - Oracle indeksleri

Index’ler şüphesiz design (dizayn) ve development (geliştirme) için oldukça hayatidir. Bildiğiniz gibi çok fazla index oluşturmak performansı olumsuz yönde etkileyecektir; fakat doğru index’ler tanımlanırsa performans artışını önemli ölçüde destekleyecektir.

Genelde index’ler uygulama geliştirme sürecinin sonucunda ihtiyaçlar tespit edilerek tanımlanırlar, kanımca bu çok da doğru bir yaklaşım değildir, bence bunu yazılım tasarım aşamasında veritabanı tasarımı yapılırken tespit etmek, yapıyı ve sorguları buna göre yazmak daha doğru bir yaklaşım olacaktır. Çünkü belirli kurallara uygun olmadan verilerin sorgulanması oldukça fazla index ihtiyacı doğuracaktır, bir şekilde siz en çok ihtiyaç olanları oluştursanız da ihtiyacı tam olarak karşılamayabilir. Optimizasyon açısından veritabanı tasarımı kısmında ilgili yapı ve index’ler doğru tasarlanırsa oldukça performanslı bir yazılım ortaya çıkacaktır.

Şimdi Oracle üzerinde veritabanı tasarımı yapacaklar için index tanımlarını açacağız, böylece doğru ve uygun index yaklaşımını belirlemek mümkün olabilir.

B*Tree Index’ler

B-Tree index’ler en çok kullanılan index türüdür. SQL Server’da da kullanılan tipik binary search hiyerarşisine sahiptir. B*Tree’de maksat arama süresini kısaltmaktır. Örnek bir B*Tree index yapısı şöyledir:

B*Tree İndeks Mimarisi
B*Tree İndeks Mimarisi

Resim Kaynak: CALLAN, S. (2015) Getting a Handle on Indexes http://www.dba-oracle.com/images/sc_Tuning2_image001th.jpg

B*Tree index’lerin en altında leaf (yaprak) block’lar bulunur. Her bir yaprak şekilde de görüldüğü gibi ROWID bilgisi saklanır. Leaf block’lar da branch (Dal) block’lara bağlıdırlar. Branch block aramanın ana hattını oluşturur, aranacak bilginin hangi leaf’te bulunduğu burada tespit edilir.

B*Tree index’lerde datalar unique (benzersiz) değildir; fakat unique yapmak mümkündür, bunun için unique anahtar kelimesinin kullanılması yeterlidir. Örneğin normal index şöyle oluşturulur:

Eğer unique hale getirmek istersek:

B*Tree Index’lerde Sıkıştırma

B*Tree index’ler sıkıştırma yapabilme özelliğine sahiplerdir. Yalnız bu sıkıştırma zip yapmak gibi bir işlem değildir, buradaki sıkıştırmadan kasıt birleştirilmiş (birden fazla kolon kullanılmış) index’lerdeki fazlalıkların ortadan kaldırılmasıdır.

Reverse Key Index

B*Tree index’lerin bir diğer özelliği de ters anahtarlama yöntemidir. Bu yöntem RAC ortamında kullanılmaktadır. RAC ortamında bir dizi değeri sequence value veya timestamp değeri tarafından doldurulurlar. Bu işlem leaf block’lardaki çakışmanın önüne geçmek için uygulanır.

RAC, birden fazla Oracle database’in bir instance üzerinde mount ve open edilmesini sağlayan bir konfigürasyon yapısıdır. Eğer iki database aynı data block’u üzerinde değişiklik yapmak isterse donanım üzerinde block’u ileri ve geri hareket ettirerek paylaşacaklardır. Eğer sequence tarafından doldurulan primary key index varsa, yeni bir index eklenmek istendiğinde bunu sağ tarafına yapacaktır (right-hand-side). Bu tür index’leme yapısında yükselen değer sağa doğru eklenir, eğer düşük değer işlenecek ise sol tarafa işlenmeye çalışılır. Ters anahtarlama yöntemi anlayacağınız üzere dengeli bir dağılım yapabilmek için kullanılmaktadır.

Descending Index’ler

B*Tree index’lerin işlevselliğini artırmak için ilk kez Oracle 8i’de gelmiş bir özellik. Kolonlar normalde Ascending (artan, büyükten küçüğe doğru) olarak sort ediliyordu, buna ek olarak Descending (azalan, büyükten küçüğe doğru) sort edilmesi sağlanmaktadır.

B*Tree Index Ne Zaman Kullanır?

İki temel durumda kullanmanız tavsiye edilmektedir:

  • Eğer tablolarınızda bulunan rowların ufak bir yüzdesine erişmek istiyorsanız B*Tree index kullanın.
  • Eğer bir tablonun birden fazla row’unu işlerken tablonun index’inden faydalanacaksanız B*Tree index kullanın.

Bitmap Index’ler

Bitmap Index’ler ilk defa Oracle 7.3 versiyonu ile geldi. Enterprise ve Personel edition’da mevcut olmasına rağmen Standart edition’da bitmap index desteği yoktur. Bitmap index’ler warehouse / adhoc gibi full table scan yapan ortamlar için tasarlanmıştır. Bu yönüyle OLTP sistemler için uygun değildir.

Bitmap index’ler birçok row’un pointer’larını bir tek index key içinde depolarlar. Daha anlaşılabilir olması açısından bir nevi rowid index’lemesidir diyebiliriz. Temelde veri çeşitliliği az kolon değerleri için uygun bir index’leme yapısıdır, SQL Server’daki Column Store Index mantığını biliyorsanız, oradaki gibi ne kadar aynı tipte veri varsa performans o ölçüde artacaktır.

Bitmap index’lerde DML (Select hariç) işlemleri çok fazla yapılan tablolar için uygun bir yapı değildir, çünkü tablodaki yeni veriler, index’in yeniden yapılandırılmasını gerektirir ki bu da epey maliyetli bir iştir. Bu yüzden DML işlemi fazla olmayan yapılar için uygundur.

Bitmap Join Index

Oracle 9i ile yeni bir index türü geldi, bitmap join index. Normal şartlarda bir index tek bir tablo için oluşturulabilir, temelde index bu tablonun kolon veya kolonlarına göre datalarını saklar. Bitmap join index ise bu kuralı değiştirmiştir. Bitmap join index ile birden fazla tablonun kolonları tek bir parça halinde index’lenebilirler.

Function – Based Index’ler

Bu index türü Oracle 8.1.5 sürümü ile geldi. Oracle’da bir sorgu işletildiğinde kimi zaman fonksiyon kullanılması zorunlu hale gelir. Örneğin UPPER() fonksiyonu ile tüm küçük harfler büyük hale getirilir. Bildiğiniz gibi aslında ‘ferhat’ ve ‘FERHAT’ verisi birbirinden iki farklı veriyi ifade etmektedir. Şimdi tablomuzda ‘ferhat’ şeklinde kayıt olduğunu varsayalım, bunu büyük harfli veri ile bulmamız için şöyle bir sorgu olmalı:

Bu tür sorgularda fonksiyon kullandığımız taktirde Oracle index’leri göz ardı eder ve Full table scan yapar. Bunun önüne geçmek için function – based index kullanılır.

Function – based index’ler iki tipte yaratılırlar: B*Tree ve Bitmap. Default olarak bir tanım yapmazsanız B*Tree tipinde yaratılırlar.

Önemli olan bir detay da function – based index kullanabilmek için aşağıdaki işlem yapılmalıdır:

0
0

Patreon

üzerinden bize destek olabilirsiniz!

.

Birlikten kuvvet doğar! Sizde #patreon üzerinden bizim yanımızda olabilirsiniz. Yaptığımız gönüllü çalışmaları arttırmak için bize destek olun.

Ücretli ve Ücretsiz Eğitimler

Türkiye'nin en büyük veri bilimi topluluğu ile kariyerinizi inşa edin.

Data Science Earth

Data Science Earth ekibi, üst düzey Veri Bilim çözümleri üretmek amacı ile toplanmış akademisyenler ve uzmanlardan oluşmaktadır. Öncelikli olarak veri bilincini geliştirmeyi ve küreselleşen rekabet ortamında verinin gücünün doğru kullanılmasını sağlamayı amaçlamaktadır.

Sponsor

QuestionPro 35 farklı soru seçim özelliği ile anket çalışmalarımıza güç katmaktadır.