【**:
表可以按
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
重建
分割槽索引和全域性索引
表可以按range hash list分割槽,表分割槽後,其上的索引和普通表上的索引有所不同,oracle對於分割槽表上的索引分為2類,即區域性索引和全域性索引,下面分別對這2種索引的特點和侷限性做個總結。區域性索引local index 1.區域性索引一定是分割槽索引,分割槽鍵等同於表的分割槽鍵,...
分割槽與索引
oracle表分割槽分為四種 範圍分割槽,雜湊分割槽,列表分割槽和復合分割槽 1.範圍分割槽 就是根據資料庫表中某一字段的值的範圍來劃分分割槽。partition by range grade partition bujige values lessthan 60 不及格 partition jig...
將已有的分割槽表全域性索引改為本地索引
由於當初建表的時候建了兩張需要儲存大量資料的分割槽表,卻沒有建立本地索引,而是使用建立主鍵的時候,oracle自動建立的全域性索引。最近由於表空間問題drop了這兩張表的部分分割槽,結果導致了ora 01502,索引失效了。在網上找了很多方法,用如下方法將全域性索引改為了本地索引,避免了以後再次對分...