反向索引之應用

2021-09-01 12:08:56 字數 1007 閱讀 8625

oracle會自動為表的主鍵列建立索引,這個預設的索引是普通的b-tree索引。對於主鍵值是按順序(遞增或遞減),如序列生產,加入的情況,預設的b-tree索引並不理想。這是因為如果索引列的值具有嚴格順序時,隨著資料行的插入,索引樹的層級增長很快,形成明顯的歪樹或者熱點,同時搜尋索引發生的i/o讀寫次數和索引樹的層級數成正比,也就是說,一棵具有5個層級的b -tree索引,在最終讀取到索引資料時最多可能發生多達5次i/o操作。因而,減少索引的層級數是索引效能調整的乙個重要方法。

索引列資料從序列中獲取,其有序性無法規避,但在建立索引時,oracle允許對索引列的值進行反向,即預先對列值進行位元位的反向,如 1234,1235,1236,1237,1238 經過反向後的值將是4321,5321,6321,7321。顯然經過位反向處理的有序資料變得比較隨機了,這樣所得到的索引樹就比較對稱,從而提高表的查詢效能。

建立反向索引例子:

order_id為t_order表的主鍵,主鍵名為pk_order,我們為order_id列上建立乙個反向鍵索引idx_order_id,並使pk_order_id使用這個索引,其sql語句如下:

create table t_order (

order_id number(10) not null,

client varchar2(60),

address varchar2(100),

order_date char(8));

create unique index idx_order_id on t_order ( order_id asc) reverse;

alter table t_order add constraint pk_order primary key (order_id) using index idx_order_id;

然而反向鍵索引也有它侷限性:如果在where語句中,需要對索引列的值進行範圍性的搜尋,如between、<、>等,其反向鍵索引無法使用,此時,oracle將執行全表掃瞄;只有對反向鍵索引列進行 <>和 = 的比較操作時,其反向鍵索引才會得到使用。

oracle之 反向鍵索引

反向鍵索引是一種b tree索引,它在保持列順序的同時,物理地改變每個索引鍵的位元組 反向鍵索引除了rowid和still之外,反轉每個索引列的位元組 例如,如果索引鍵為20,如果在十六進製制中儲存為這個鍵的兩個位元組是c1,則是標準b樹索引中的15個位元組,那麼乙個反向鍵索引將位元組儲存為15,c...

oracle之 反向鍵索引

反向鍵索引是一種b tree索引,它在保持列順序的同時,物理地改變每個索引鍵的位元組 反向鍵索引除了rowid和still之外,反轉每個索引列的位元組 例如,如果索引鍵為20,如果在十六進製制中儲存為這個鍵的兩個位元組是c1,則是標準b樹索引中的15個位元組,那麼乙個反向鍵索引將位元組儲存為15,c...

python中反向索引 列表索引和反向索引

python與索引 我一直在研究乙個普通的python 來將資料從csv中分離出來。我的目標是使用多種策略重新建立這段 以便更好地理解python。稍後將對該 進行改進。我的 是有效的,但有一些事情我不明白。這裡是 with open c my super secret path primary d...