oracle 索引分類 使用場合和建立方法

2021-08-19 17:36:21 字數 2787 閱讀 2372

邏輯上:

single column 單行索引

concatenated 多行索引

unique 唯一索引   create unique index  索引名 on 表名(想要建立索引的列名);

nonunique 非唯一索引

function-based函式索引 

(基於函式的索引 

1基於函式的索引是常規的b樹索引。 

2該索引存放的資料是由表中的資料應用函式後得到的,而不是直接存放表中的資料本身。 

3如果查詢條件包含與索引相同的函式,就可以使用基於函式的索引,提高查詢速度 

例:下面為建立時間轉換函式的索引

create index index_date on test_table  (to_date( col1||col2,'yyyy-mm-dd hh24:mi:ss')) 

)domain 域索引

物理上:

partitioned 分割槽索引

global索引和local索引

create

index

inx_tab_partition_col1 

ontable_partition(col1)  

global

partition 

byrange(col1)(  

partition idx_p1 values

less than (1000000),  

partition idx_p2 values

less than (2000000),  

partition idx_p3 values

less than (maxvalue)  

);  

nonpartitioned 非分割槽索引

b-tree:

normal 正常型b樹

rever key 反轉型b樹 

bitmap 位圖索引

索引結構:

b-tree:

適合與大量的增、刪、改(oltp);

不能用包含or操作符的查詢;

適合高基數的列(唯一值多)

典型的樹狀結構;

每個結點都是資料塊;

大多都是物理上一層、兩層或三層不定,邏輯上三層;

葉子塊資料是排序的,從左向右遞增;

在分支塊和根塊中放的是索引的範圍;

bitmap:

適合與決策支援系統;

做update代價非常高;

非常適合or操作符的查詢; 

基數比較少的時候才能建位圖索引;

樹型結構:

索引頭 

開始rowid,結束rowid(先列出索引的最大範圍)

bitmap

每乙個bit對應著乙個rowid,它的值是1還是0,如果是1,表示著bit對應的rowid有值

1. b-tree索引

oracle資料庫中最常見的索引型別是b-tree索引,也就是b-樹索引,以其同名的計算科學結構命名。create 

index語句時,預設就是在建立b-tree索引。沒有特別規定可用於任何情況。

2. 位圖索引(bitmap index)

位圖索引特定於該列只有幾個列舉值的情況,比如性別字段,標示字段比如只有0和1的情況。

3. 基於函式的索引

比如經常對某個欄位做查詢的時候是帶函式操作的,那麼此時建乙個函式索引就有價值了。

4. 分割槽索引和全域性索引

這2個是用於分割槽表的時候。前者是分區內索引,後者是全表索引

5. 反向索引(reverse)

這個索引不常見,但是特定情況特別有效,比如乙個varchar(5)位欄位(員工編號)含值

(10001,10002,10033,10005,10016..)

這種情況預設索引分布過於密集,不能利用好伺服器的並行

但是反向之後10001,20001,33001,50001,61001就有了乙個很好的分布,能高效的利用好並行運算。

6.hash索引

hash索引可能是訪問資料庫中資料的最快方法,但它也有自身的缺點。集群鍵上不同值的數目必須在建立hash集群之前就要知道。需要在建立hash集群的時候指定這個值。使用hash索引必須要使用hash集群。

3 各種索引的建立方法

(1)*tree索引。

create index indexname on tablename(columnname[columnname...])

(2)反向索引。

create index indexname on tablename(columnname[columnname...]) reverse

(3)降序索引。

create index indexname on tablename(columnname desc[columnname...])

(4)位圖索引。

create bitmap index indexname on tablename(columnname[columnname...])

(5)函式索引。

create index indexname on tablename(functionname(columnname))

注意:建立索引後分析要索引才能起作用。

analyze index indexname compute statistics;

4 各種索引使用場合及建議(1)b*tree索引。

hints是oracle提供的乙個輔助用法,按字面理解就是『提示』的意思,確實它起得作用也是提示優化器按它所提供的關鍵字來選擇執行路徑,特別適用於sql調整的時候。使用方法如下:

/*+ index( indexname)*/

oracle跳躍索引的應用場合

索引跳躍式掃瞄 index skip scan 是oracle9i的乙個新的執行特性,尤其適用於使用連線索引和訪問多值索引的oracle查詢。根據 索引跳躍式掃瞄 index skip scan 是oracle9i的乙個新的執行特性,尤其適用於使用連線索引和訪問多值索引的oracle查詢。讓我們看以...

hadoop的使用場合與不使用場合

1.在web中頁面的快速響應中不適合用hadoop 響應時間在ms級別 2.大量的小檔案處理不使用用hadoop 元資料較多,而且元資料是儲存在namenode中的,記憶體占用大 3.hdfs中的block 乙個block只是可以儲存乙個檔案 但是乙個檔案可以由多個塊組成,預設情況下乙個block有...

介面和抽象類使用場合

inte ce 中的方法不能有實現,作用是分類功能,乙個類可以實現多個介面.public inte ce ifoo public inte ce ibar public impl implements ifoo,ibar public int domath int a,int b,int c 抽象類...