4 Aralık 2008 Perşembe

Reverse Key Indexes

Merhaba,

Bir index yarattığımız zaman (create index komutu kullanarak) sıradan bir b-tree index yaratmış oluyoruz. Bu yazımda bahsedeceğim konu ise Index'lerin Reverse Key ve Bitmap olanları.

Reverse Key Indexes: Bu index'in, standart bir b-tree index'ten en büyük farkı; kolonları değiştirmeden sadece indexlenen her kolonun byte'ını ters çevirmesidir. Bu durumda index'in okuduğu byte'ların yerleri tamamen değişecek ve bir takım performans problemlerine yol açacaktır. Yani, heap organized bir tablo'da yaratılan ve paşa paşa kullanılan bir b-tree index'i reverse ederseniz, bu büyük bir yanlışlık olacaktır. Reverse işlemi genelde RAC (Real Application Cluster)'lardaki performans problemlerini çözmek için kullanılır. Ayrıca, düzgün bir yapıya sahip index eğer reverse edilirse index range scan yapabilmekte bir hayal olarak kalacaktır. Çünkü index'in point ettiği alanların yerleri altüst olacak ve range ile bakabilmesi imkansız olacağından index yerine histogramlar vasıtasıyla ya full table scan'e bırakacaktır ya da düzensiz olarak reverse key index ile çalışıp, performansı son derece düşürecektir.
Reverse Key Index'leri genelde OLTP RAC (Online Transaction Processing Real Application Clusters) ortamlarında performansı arttırmak için kullanıyoruz.

Bir örnek vermek gerekirse;

SQL > CREATE INDEX index_deneme ON ogan_deneme (kullanici_adi) REVERSE;

Yukarıdaki örnekte, index_deneme diye bir reverse key index'i ogan_deneme tablosunun kullanici_adi kolonunda yarattık.

Reverse Key bir index'i eski haline döndürebilmek içinse;

SQL> ALTER INDEX index_deneme REBUILD NOREVERSE;

diyoruz... Ayrıca noverse demezsek, index_deneme reverse haliyle rebuild edilecektir.

Index'lerin genelde hızlı olmasının sebebi rowid'lerden, belirli bir düzen ile gitmesidir. Oracle veritabanın'da veriye en hızlı ulaşma yolu ise rowid'dir. Bu sebepten dolayıdır ki b-tree index'ler rowid'leri takip ederek sonuca ulaşırlar.

İyi çalışmalar,

Ogan

Hiç yorum yok:

Takip et: @oganozdogan