深入oracle分區(qū)索引的詳解
更新時(shí)間:2013年05月30日 09:23:07 作者:
本篇文章是對(duì)oracle分區(qū)索引進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
表可以按range、hash、list分區(qū),表分區(qū)后,其上的索引和普通表上的索引有所不同,oracle對(duì)于分區(qū)表上的索引分為2類(lèi),即局部索引和全局索引,下面分別對(duì)這2種索引的特點(diǎn)和局限性做個(gè)總結(jié)。
局部索引local index
1.局部索引一定是分區(qū)索引,分區(qū)鍵等同于表的分區(qū)鍵,分區(qū)數(shù)等同于表的分區(qū)數(shù),一句話(huà),局部索引的分區(qū)機(jī)制和表的分區(qū)機(jī)制一樣。
2.如果局部索引的索引列以分區(qū)鍵開(kāi)頭,則稱(chēng)為前綴局部索引。
3.如果局部索引的列不是以分區(qū)鍵開(kāi)頭,或者不包含分區(qū)鍵列,則稱(chēng)為非前綴索引。
4.局部索引只能依附于分區(qū)表上。
5.前綴和非前綴索引都可以支持索引分區(qū)消除,前提是查詢(xún)的條件中包含索引分區(qū)鍵。
6.局部索引只支持分區(qū)內(nèi)的唯一性,無(wú)法支持表上的唯一性,因此如果要用局部索引去給表做唯一性約束,則約束中必須要包括分區(qū)鍵列。
7.局部分區(qū)索引是對(duì)單個(gè)分區(qū)的,每個(gè)分區(qū)索引只指向一個(gè)表分區(qū);全局索引則不然,一個(gè)分區(qū)索引能指向n個(gè)表分區(qū),同時(shí),一個(gè)表分區(qū),也可能指向n個(gè)索引分區(qū),對(duì)分區(qū)表中的某個(gè)分區(qū)做truncate或者move,shrink等,可能會(huì)影響到n個(gè)全局索引分區(qū),正因?yàn)檫@點(diǎn),局部分區(qū)索引具有更高的可用性。
8.位圖索引只能為局部分區(qū)索引。
9.局部索引多應(yīng)用于數(shù)據(jù)倉(cāng)庫(kù)環(huán)境中。
全局索引global index
1.全局索引的分區(qū)鍵和分區(qū)數(shù)和表的分區(qū)鍵和分區(qū)數(shù)可能都不相同,表和全局索引的分區(qū)機(jī)制不一樣。
2.全局索引可以分區(qū),也可以是不分區(qū)索引,全局索引必須是前綴索引,即全局索引的索引列必須是以索引分區(qū)鍵作為其前幾列。
3.全局索引可以依附于分區(qū)表;也可以依附于非分區(qū)表。
4.全局分區(qū)索引的索引條目可能指向若干個(gè)分區(qū),因此,對(duì)于全局分區(qū)索引,即使只截?cái)嘁粋€(gè)分區(qū)中的數(shù)據(jù),都需要rebulid若干個(gè)分區(qū)甚至是整個(gè)索引。
5.全局索引多應(yīng)用于oltp系統(tǒng)中。
6.全局分區(qū)索引只按范圍或者散列分區(qū),hash分區(qū)是10g以后才支持。
7.oracle9i以后對(duì)分區(qū)表做move或者truncate的時(shí)可以用update global indexes語(yǔ)句來(lái)同步更新全局分區(qū)索引,用消耗一定資源來(lái)?yè)Q取高度的可用性。
8.表用a列作分區(qū),索引用b做局部分區(qū)索引,若where條件中用b來(lái)查詢(xún),那么oracle會(huì)掃描所有的表和索引的分區(qū),成本會(huì)比分區(qū)更高,此時(shí)可以考慮用b做全局分區(qū)索引。
分區(qū)索引字典
DBA_PART_INDEXES 分區(qū)索引的概要統(tǒng)計(jì)信息,可以得知每個(gè)表上有哪些分區(qū)索引,分區(qū)索引的類(lèi)型(local/global)
Dba_ind_partitions 每個(gè)分區(qū)索引的分區(qū)級(jí)統(tǒng)計(jì)信息
Dba_indexes/dba_part_indexes 可以得到每個(gè)表上有哪些非分區(qū)索引
索引重建
Alter index idx_name rebuild partition index_partition_name [online nologging]
需要對(duì)每個(gè)分區(qū)索引做rebuild,重建的時(shí)候可以選擇online(不會(huì)鎖定表),或者nologging建立索引的時(shí)候不生成日志,加快速度。
Alter index rebuild idx_name [online nologging]
對(duì)非分區(qū)索引,只能整個(gè)index重建
分區(qū)索引實(shí)例
--1、建分區(qū)表
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、建全局分區(qū)索引
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、建本地分區(qū)索引
CREATE INDEX IDX_PT_C2 ON P_TAB(C2) LOCAL (PARTITION P1,PARTITION P2,PARTITION P3,PARTITION P4);
--4、建全局分區(qū)索引(與分區(qū)表分區(qū)規(guī)則相同的列上)
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、分區(qū)索引數(shù)據(jù)字典查看
SELECT * FROM USER_IND_PARTITIONS;
SELECT * FROM USER_PART_INDEXES;
局部索引local index
1.局部索引一定是分區(qū)索引,分區(qū)鍵等同于表的分區(qū)鍵,分區(qū)數(shù)等同于表的分區(qū)數(shù),一句話(huà),局部索引的分區(qū)機(jī)制和表的分區(qū)機(jī)制一樣。
2.如果局部索引的索引列以分區(qū)鍵開(kāi)頭,則稱(chēng)為前綴局部索引。
3.如果局部索引的列不是以分區(qū)鍵開(kāi)頭,或者不包含分區(qū)鍵列,則稱(chēng)為非前綴索引。
4.局部索引只能依附于分區(qū)表上。
5.前綴和非前綴索引都可以支持索引分區(qū)消除,前提是查詢(xún)的條件中包含索引分區(qū)鍵。
6.局部索引只支持分區(qū)內(nèi)的唯一性,無(wú)法支持表上的唯一性,因此如果要用局部索引去給表做唯一性約束,則約束中必須要包括分區(qū)鍵列。
7.局部分區(qū)索引是對(duì)單個(gè)分區(qū)的,每個(gè)分區(qū)索引只指向一個(gè)表分區(qū);全局索引則不然,一個(gè)分區(qū)索引能指向n個(gè)表分區(qū),同時(shí),一個(gè)表分區(qū),也可能指向n個(gè)索引分區(qū),對(duì)分區(qū)表中的某個(gè)分區(qū)做truncate或者move,shrink等,可能會(huì)影響到n個(gè)全局索引分區(qū),正因?yàn)檫@點(diǎn),局部分區(qū)索引具有更高的可用性。
8.位圖索引只能為局部分區(qū)索引。
9.局部索引多應(yīng)用于數(shù)據(jù)倉(cāng)庫(kù)環(huán)境中。
全局索引global index
1.全局索引的分區(qū)鍵和分區(qū)數(shù)和表的分區(qū)鍵和分區(qū)數(shù)可能都不相同,表和全局索引的分區(qū)機(jī)制不一樣。
2.全局索引可以分區(qū),也可以是不分區(qū)索引,全局索引必須是前綴索引,即全局索引的索引列必須是以索引分區(qū)鍵作為其前幾列。
3.全局索引可以依附于分區(qū)表;也可以依附于非分區(qū)表。
4.全局分區(qū)索引的索引條目可能指向若干個(gè)分區(qū),因此,對(duì)于全局分區(qū)索引,即使只截?cái)嘁粋€(gè)分區(qū)中的數(shù)據(jù),都需要rebulid若干個(gè)分區(qū)甚至是整個(gè)索引。
5.全局索引多應(yīng)用于oltp系統(tǒng)中。
6.全局分區(qū)索引只按范圍或者散列分區(qū),hash分區(qū)是10g以后才支持。
7.oracle9i以后對(duì)分區(qū)表做move或者truncate的時(shí)可以用update global indexes語(yǔ)句來(lái)同步更新全局分區(qū)索引,用消耗一定資源來(lái)?yè)Q取高度的可用性。
8.表用a列作分區(qū),索引用b做局部分區(qū)索引,若where條件中用b來(lái)查詢(xún),那么oracle會(huì)掃描所有的表和索引的分區(qū),成本會(huì)比分區(qū)更高,此時(shí)可以考慮用b做全局分區(qū)索引。
分區(qū)索引字典
DBA_PART_INDEXES 分區(qū)索引的概要統(tǒng)計(jì)信息,可以得知每個(gè)表上有哪些分區(qū)索引,分區(qū)索引的類(lèi)型(local/global)
Dba_ind_partitions 每個(gè)分區(qū)索引的分區(qū)級(jí)統(tǒng)計(jì)信息
Dba_indexes/dba_part_indexes 可以得到每個(gè)表上有哪些非分區(qū)索引
索引重建
Alter index idx_name rebuild partition index_partition_name [online nologging]
需要對(duì)每個(gè)分區(qū)索引做rebuild,重建的時(shí)候可以選擇online(不會(huì)鎖定表),或者nologging建立索引的時(shí)候不生成日志,加快速度。
Alter index rebuild idx_name [online nologging]
對(duì)非分區(qū)索引,只能整個(gè)index重建
分區(qū)索引實(shí)例
復(fù)制代碼 代碼如下:
--1、建分區(qū)表
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、建全局分區(qū)索引
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、建本地分區(qū)索引
CREATE INDEX IDX_PT_C2 ON P_TAB(C2) LOCAL (PARTITION P1,PARTITION P2,PARTITION P3,PARTITION P4);
--4、建全局分區(qū)索引(與分區(qū)表分區(qū)規(guī)則相同的列上)
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、分區(qū)索引數(shù)據(jù)字典查看
SELECT * FROM USER_IND_PARTITIONS;
SELECT * FROM USER_PART_INDEXES;
相關(guān)文章
Oracle數(shù)據(jù)IMP和EXP命令用法詳解
這篇文章主要給大家介紹了關(guān)于Oracle數(shù)據(jù)IMP和EXP命令用法詳解的相關(guān)資料,我們可以使用Oracle自帶的exp、imp命令來(lái)進(jìn)行數(shù)據(jù)庫(kù)備份,imp和exp稱(chēng)之為導(dǎo)入導(dǎo)出,這種方式也能快速的導(dǎo)入導(dǎo)出table或數(shù)據(jù)庫(kù),需要的朋友可以參考下2023-11-11Linux一鍵部署oracle安裝環(huán)境腳本(推薦)
這篇文章主要介紹了Linux一鍵部署oracle安裝環(huán)境腳本,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-01-01Oracle數(shù)倉(cāng)中判斷時(shí)間連續(xù)性的幾種SQL寫(xiě)法示例
這篇文章主要給大家介紹了關(guān)于Oracle數(shù)倉(cāng)中判斷時(shí)間連續(xù)性的幾種SQL寫(xiě)法,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Oracle具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2023-02-02Oracle連接數(shù)據(jù)庫(kù)提示ORA-12638:身份證明檢索失敗的解決辦法
今天在使用應(yīng)用程序連接Oracle時(shí)碰到了"ORA-12638:身份證明檢索失敗"錯(cuò)誤,給大家總結(jié)解決方法,這篇文章主要給大家介紹了關(guān)于Oracle連接數(shù)據(jù)庫(kù)提示ORA-12638:身份證明檢索失敗的解決辦法,需要的朋友可以參考下2023-10-10Oracle 獲取上周一到周末日期的查詢(xún)sql語(yǔ)句
本文為大家介紹下Oracle如何取得上周一到周末日期的查詢(xún)語(yǔ)句,感興趣的朋友可以聊接下2013-09-09Oracle報(bào)錯(cuò)記錄被另外一個(gè)用戶(hù)鎖定的解決方案
這篇文章主要介紹了Oracle報(bào)錯(cuò)記錄被另外一個(gè)用戶(hù)鎖定的解決方案,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10