表可以按
range
、hash
、list
分割槽,表分割槽後,其上的索引和普通表上的索引有所不同,
oracle
對於分割槽表上的索引分為
2類,即區域性索引和全域性索引,下面分別對這
2種索引的特點和侷限性做個總結。
1.區域性索引一定是分割槽索引,分割槽鍵等同於表的分割槽鍵,分割槽數等同於表的分割槽數,一句話,區域性索引的分割槽機制和表的分割槽機制一樣。 2.
如果區域性索引的索引列以分割槽鍵開頭,則稱為字首區域性索引。 3.
如果區域性索引的列不是以分割槽鍵開頭,或者不包含分割槽鍵列,則稱為非字首索引。 4.
區域性索引只能依附於分割槽表上。 5.
字首和非字首索引都可以支援索引分割槽消除,前提是查詢的條件中包含索引分割槽鍵。 6.
區域性索引只支援分區內的唯一性,無法支援表上的唯一性,因此如果要用區域性索引去給表做唯一性約束,則約束中必須要包括分割槽鍵列。 7.
區域性分割槽索引是對單個分割槽的,每個分割槽索引只指向乙個表分割槽;全域性索引則不然,乙個分割槽索引能指向
n個表分割槽,同時,乙個表分割槽,也可能指向
n個索引分割槽,對分割槽表中的某個分割槽做
truncate
或者move
,shrink
等,可能會影響到
n個全域性索引分割槽,正因為這點,區域性分割槽索引具有更高的可用性。 8.
位圖索引只能為區域性分割槽索引。 9.
區域性索引多應用於資料倉儲環境中。
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
重建
oracle分割槽索引
前兩天做乙個大的分割槽表的資料清理,split 分割槽後,忘記rebuild 索引,導致生產庫查詢的分割槽表非常的緩慢 對分割槽表某個分割槽做split 如果沒有在alter table 語句最後加上update indexes,被 出的兩個分割槽的本地索引和整個表的全域性索引都會失效。當根據索引字...
oracle 分割槽和分割槽索引
1 分割槽分類 range分割槽,hash分割槽,list分割槽,復合分割槽,間隔分割槽,system分割槽 2 range分割槽 區域分割槽,就是按照定義的區域進行分割槽 語法 create table partition by range field partition p1 values le...
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...