Oracle索引 索引型別

2021-09-01 15:43:38 字數 3253 閱讀 3322

oracle 提供了多種不同型別的索引以供使用。簡單地說, oracle 中包括如下索引:

b* 樹索引

這些是我所說的 「 

傳統 「 

索引。到目前為止,這是 

oracle 

和大多數其他資料庫中最常用的索引。 

b* 樹的構造類似於二叉樹,能根據鍵提供一行或乙個行集的快速訪問,通常只需很少的讀操作就能找到正確的行。不過,需要注意重要的一點, 

」 b* 

樹 「 

中的 」 b 「 

不代表二叉( 

binary 

),而代表平衡( 

b alanced 

)。b* 

樹索引並不是一顆二叉樹,這一點在介紹如何在磁碟上物理地儲存 

b* 樹時就會了解到。 

b* 樹索引有以下子型別:

索引組織表( index organized table 

):索引組織表以 

b* 樹結構儲存。

堆表的資料行是以一種無組織的方式儲存的(只要有可用的空間,就可以放資料),而 iot 

與之不同, 

iot 

中的資料要按主鍵的順序儲存和排序

。對應用來說, iot 

表現得與 

「 常規 

「 表並無二致;需要使用 

sql 

來正確地訪問 

iot 

。 iot 

對資訊獲取、空間系統和 

olap 

應用最為有用。 

iot 

在上一章已經詳細地討論過。

b*樹聚簇索引( 

b*tree cluster index 

)這些是傳統 

b* 樹索引的乙個變體(只是稍有變化)。 

b* 樹聚簇索引用於對聚簇鍵建立索引(見第 

11. 

章中 「 

索引聚簇表 

「 一節),所以這一章不再討論。在傳統 

b* 樹中 ,鍵都指向一行;而 

b* 樹聚簇不同,

乙個聚簇鍵會指向乙個塊,其中包含與這個聚簇鍵相關的多行。

降序索引( descending index 

):降序索引允許資料在索引結構中按 

「 從大到小 

「 的順序(降序)排序,而不是按 

」 從小到大 

「 的順序(公升序)排序。我們會解釋為什麼降序索引很重要,並說明降序索引如何工作。

反向鍵索引( reverse key index 

):這也是 

b* 樹索引,只不過鍵中的位元組會 

「 反轉 

「 。利用反向鍵索引,如果索引中填充的是遞增的值,索引條目在索引中可以得到更均勻的分布。例如,如果使用乙個序列來生成主鍵,這個序列將生成諸如 

987500 

、 987501 

、 987502 

等值。這些值是順序的,所以倘若使用一 個傳統的 

b* 樹索引,這些值就可能放在同乙個右側塊上,這就加劇了對這一塊的競爭。利用反向鍵, 

oracl e

則會邏輯地對 

205789 

、 105789 

、 005789 

等建立索引。 

oracle 

將資料放在索引中之前,將先 把所儲存資料的位元組反轉,這樣原來可能在索引中相鄰放置的值在位元組反轉之後就會相距很遠。通過反轉位元組,對索引的插入就會分布到多個塊上。

位圖索引( bitmap index 

)在一顆 b* 

樹中,通常索引條目和行之間存在一種一對一的關係:乙個 索引條目就指向一行。

而對於位圖索引,乙個索引條目則使用乙個位圖同時指向多行。位圖索引適用於高度重複而且通常唯讀的資料(高度重複是指相對於表中的總行數,資料只有很少的幾個不同值)

。考慮在一 個有 100 

萬行的表中,每個列只有 

3 個可取值: 

y 、 

n 和 

null 

。舉例來說,如果你需要頻繁地統計多少行有值

y ,這就很適合建立位圖索引。不過並不是說如果這個表中某一列有 

11.000 

個不同的值就不能建立位圖索引,這一列當然也可以建立 位圖索引。在乙個 

oltp 

資料庫中,由於存在

併發性相關的問題,所以不能考慮使用位圖索引(後面我們就會討論這一點)。注意,位圖索引要求使用 oracle 

企業版或個人版。

位圖聯結索引( bitmap join index 

):這為索引結構(而不是表)中的資料提供了一種逆規範化的 方法。例如,請考慮簡單的 

emp 

和 dept 

表。有人可能會問這樣乙個問題: 

「 多少人在位於波士頓的部門工作 ?

「 emp 

有乙個指向 

dept 

的外來鍵,要想統計 

loc 

值為 boston 

的部門中的員工人數,通常必須完成表聯結,將 

loc 

列聯結至 

emp 

記錄來回答這個問題。通過使用位圖聯結索引,則可以在 

emp 

表上對 

loc 

列建立索引 。

基於函式的索引( function-based index 

)這些就是 b* 

樹索引或位圖索引,它將乙個函式計算得到的結果儲存在行的列中,而不是儲存列資料本身。可以把基於函式的索引看作乙個虛擬列(或派生列)上的索引,換句話說,這個列並不物理儲存在表中。基於函式的索引可以用於加快形如 

select * from t w here

function(database_column) = same_value 這樣的查詢,因為值 

function(database_column) 

已經提前計算並儲存在索引中。

)應用域索引是你自己構建和儲存的索引,可能儲存在oracle 

中,也可能在 

oracle 

之外。你要告訴優化器索引的選擇性如何,以及執行的開銷有多大,優化器則會根據你提供的資訊來決定是否使用你的索引。 

oracle 

文字索引就是應用域索引的乙個例子;你也可 以使用構建 

oracle 

文字索引所用的工具來建立自己的索引。需要指出,這裡建立的 

「 索引 

「 不需要使用傳統的索引結構。例如, 

oracle 

文字索引就使用了一組表來實現其索引概念。

oracle 索引型別

索引的分類 1二叉樹索引或者叫b數索引 b tree indexes b樹索引是使用最多的一種索引.在預設情況下,我們建立的索引都是b樹索引.b樹索引基於二叉樹原理 2.二叉樹聚簇索引 b tree cluster indexes 主要用於聚簇 3.雜湊聚簇索引 hash cluster index...

Oracle的索引型別總結

1 b tree索引 oracle資料庫中最常見的索引型別是b tree索引,也就是b 樹索引,以其同名的計算科學結構命名。每當你發布基本的沒有經過進 一步修改的create index語句時,就是在建立b tree索引。這裡不打算對b tree索引進行更多深入的 這些使用者都可以自己了解。基本上這...

各種Oracle索引型別介紹

邏輯上 single column 單行索引 concatenated 多行索引 unique 唯一索引 nonunique 非唯一索引 function based函式索引 domain 域索引 物理上 partitioned 分割槽索引 nonpartitioned 非分割槽索引 b tree ...