深入oracle分割槽索引的詳解

2021-06-25 11:01:08 字數 2956 閱讀 1252

表可以按range、hash、list分割槽,表分割槽後,其上的索引和普通表上的索引有所不同,oracle對於分割槽表上的索引分為2類,即

區域性索引和全域性索引

,下面分別對這2種索引的特點和侷限性做個總結。

區域性索引local index

1.區域性索引一定是分割槽索引

,分割槽鍵等同於表的分割槽鍵,分割槽數等同於表的分割槽數,一句話,區域性索引的分割槽機制和表的分割槽機制一樣。

2.如果區域性索引的索引列以分割槽鍵開頭,則稱為字首區域性索引。

3.如果區域性索引的列不是以分割槽鍵開頭,或者不包含分割槽鍵列,則稱為非字首索引。

4.區域性索引只能依附於分割槽表上。

5.字首和非字首索引都可以支援索引分割槽消除,前提是查詢的條件中包含索引分割槽鍵。

6.區域性索引只支援分區內的唯一性,無法支援表上的唯一性,因此如果要用區域性索引去給表做唯一性約束,則約束中必須要包括分割槽鍵列。

7.區域性分割槽索引是對單個分割槽的,每個分割槽索引只指向乙個表分割槽;全域性索引則不然,乙個分割槽索引能指向n個表分割槽,同時,乙個表分割槽,也可能指向n個索引分割槽,對分割槽表中的某個分割槽做truncate或者move,shrink等,可能會影響到n個全域性索引分割槽,正因為這點,區域性分割槽索引具有更高的可用性。

8.點陣圖索引只能為區域性分割槽索引。

9.區域性索引多應用於資料倉儲環境中。

全域性索引global index

1.全域性索引的分割槽鍵和分割槽數和表的分割槽鍵和分割槽數可能都不相同

,表和全域性索引的分割槽機制不一樣。

2.全域性索引可以分割槽,也可以是不分割槽索引,全域性索引必須是字首索引

,即全域性索引的索引列必須是以索引分割槽鍵作為其前幾列。

3.全域性索引可以依附於分割槽表;也可以依附於非分割槽表。

4.全域性分割槽索引的索引條目可能指向若干個分割槽,因此,對於全域性分割槽索引,即使只截斷乙個分割槽中的資料,都需要rebulid若干個分割槽甚至是整個索引。

5.全域性索引多應用於oltp系統中。

6.全域性分割槽索引只按範圍或者雜湊分割槽,hash分割槽是10g以後才支援。

7.oracle9i以後對分割槽表做move或者truncate的時可以用update global indexes語句來同步更新全域性分割槽索引,用消耗一定資源來換取高度的可用性。

8.錶用a列作分割槽,索引用b做區域性分割槽索引,若where條件中用b來查詢,那麼oracle會掃瞄所有的表和索引的分割槽,成本會比分區更高,此時可以考慮用b做全域性分割槽索引。

分割槽索引字典

dba_part_indexes

分割槽索引的概要統計資訊,可以得知每個表上有哪些分割槽索引,分割槽索引的型別(local/global)

dba_ind_partitions

每個分割槽索引的分割槽級統計資訊

dba_indexes/dba_part_indexes

可以得到每個表上有哪些非分割槽索引

索引重建

alter index idx_name rebuild partition index_partition_name [online nologging]

需要對每個分割槽索引做rebuild,重建的時候可以選擇online(不會鎖定表),或者nologging建立索引的時候不生成日誌,加快速度。

alter index rebuild idx_name [online nologging]

對非分割槽索引,只能整個index重建

分割槽索引例項

複製**

**如下:

--1、建分割槽表  

create table p_tab(  

c1 int,  

c2 varchar2(16),  

c3 varchar2(64),  

c4 int ,  

constraint pk_pt primary key (c1)  

)  partition by range(c1)(  

partition p1 values less than (10000000),  

partition p2 values less than (20000000),  

partition p3 values less than (30000000),  

partition p4 values less than (maxvalue)  

);  

--2、建全域性分割槽索引  

create index idx_pt_c4 on p_tab(c4) global partition by range(c4)  

(  partition ip1 values less than(10000),  

partition ip2 values less than(20000),  

partition ip3 values less than(maxvalue)  

);  

--3、建本地分割槽索引  

create index idx_pt_c2 on p_tab(c2) local (partition p1,partition p2,partition p3,partition p4);  

--4、建全域性分割槽索引(與分割槽表分割槽規則相同的列上)  

create index idx_pt_c1  

on p_tab(c1)  

global partition by range (c1)  

(  partition ip01 values less than (10000000),  

partition ip02 values less than (20000000),  

partition ip03 values less than (30000000),  

partition ip04 values less than (maxvalue)  

);  

--5、分割槽索引資料字典檢視  

select * from user_ind_partitions;  

select * from user_part_indexes;  

Oracle 分割槽索引詳解

oracle 分割槽索引詳解 table index create unique bitmap index schema.index name on schema.table name tbl alias col asc desc index clauseindex attribs index cl...

Oracle分割槽索引

表可以按 range hash list 分割槽,表分割槽後,其上的索引和普通表上的索引有所不同,oracle 對於分割槽表上的索引分為 2類,即區域性索引和全域性索引,下面分別對這 2種索引的特點和侷限性做個總結。1.區域性索引一定是分割槽索引,分割槽鍵等同於表的分割槽鍵,分割槽數等同於表的分割槽...

oracle分割槽索引

前兩天做乙個大的分割槽表的資料清理,split 分割槽後,忘記rebuild 索引,導致生產庫查詢的分割槽表非常的緩慢 對分割槽表某個分割槽做split 如果沒有在alter table 語句最後加上update indexes,被 出的兩個分割槽的本地索引和整個表的全域性索引都會失效。當根據索引字...