【INDEX】Oracle分割槽索引技術詳解
環境準備
建立分割槽表
--建立表結構CREATE TABLE sf2021( sf_id int NOT NULL, sf_name varchar2(40) NOT NULL, sf_address VARCHAR2(20) NOT NULL, insert_time DATE DEFAULT SYSDATE NOT NULL )PARTITION BY RANGE (insert_time)( PARTITION p202102 VALUES LESS THAN (to_date('202102','yyyymm')), PARTITION p202103 VALUES LESS THAN (to_date('202103','yyyymm')), PARTITION p202104 VALUES LESS THAN (to_date('202104','yyyymm')), PARTITION p202105 VALUES LESS THAN (to_date('202105','yyyymm')), PARTITION p202106 VALUES LESS THAN (to_date('202106','yyyymm')), PARTITION p202107 VALUES LESS THAN (to_date('202107','yyyymm')), PARTITION p202108 VALUES LESS THAN (to_date('202108','yyyymm')), PARTITION pmax VALUES LESS THAN (maxvalue)); --建立插入程式create or replace procedure proc_sf2021_insert(tablecount int)asbegin for i in 1..tablecount loop insert into mytest.sf2021select trunc(DBMS_RANDOM.VALUE(100000,10000000000)),DECODE(DBMS_RANDOM.STRING(0, 1),'A','張','B','周','C','李','D','趙','E','安','F','王小','G','楊','楊') || DECODE(DBMS_RANDOM.STRING(0, 1),'A','娜','B','娟','C','梅','D','美','E','鵬','F','愛國','中華'),'山東省'|| DECODE(DBMS_RANDOM.STRING(0, 1),'A','濟南市','B','德州市','C','青島市','D','濰坊市','E','淄博市','F','濱州市','G','臨沂市','H','煙臺市','L','日照市','M','東營市','N','菏澤市','聊城市'),to_date('2021/'||trunc(dbms_random.value(1,8))||'/'||trunc(dbms_random.value(1,28)),'yyyy/mm/dd') from dual; end loop; commit;end;/--插入一萬條資料exec proc_sf2021_insert(10000);--檢視分割槽分佈col insert_time for a20select to_char(insert_time,'yyyy/mm') insert_time,count(*) from sf2021 group by to_char(insert_time,'yyyy/mm');
本地分割槽索引
本地分割槽索引,只適用於分割槽表分割槽鍵
--分割槽鍵,建立本地分割槽索引create index sf2021_idx_id on sf2021(insert_time) local;--檢視分割槽狀態 --索引及分割槽型別可參考 dba_part_indexesSQL> select index_name,PARTITION_NAME,STATUS from DBA_IND_PARTITIONS where index_name='SF2021_IDX_ID';INDEX_NAME PARTITION_NAME STATUS------------------------------ ------------------------------ --------SF2021_IDX_ID P202102 USABLESF2021_IDX_ID P202103 USABLESF2021_IDX_ID P202104 USABLESF2021_IDX_ID P202105 USABLESF2021_IDX_ID P202106 USABLESF2021_IDX_ID P202107 USABLESF2021_IDX_ID P202108 USABLESF2021_IDX_ID PMAX USABLE8 rows selected.--建立全域性hash分割槽create index sf2021_idx_hash on sf2021(sf_id) global partition by hash(sf_id) partitions 6;
全域性分割槽索引
全域性分割槽索引 可分為範圍和雜湊.
--建立全域性hash分割槽create index sf2021_idx_hash on sf2021(sf_id) global partition by hash(sf_id) partitions 6;--檢視SQL> select index_name,PARTITION_NAME,STATUS from DBA_IND_PARTITIONS where index_name='SF2021_IDX_HASH';INDEX_NAME PARTITION_NAME STATUS------------------------------ ------------------------------ --------SF2021_IDX_HASH SYS_P61 USABLESF2021_IDX_HASH SYS_P62 USABLESF2021_IDX_HASH SYS_P63 USABLESF2021_IDX_HASH SYS_P64 USABLESF2021_IDX_HASH SYS_P65 USABLESF2021_IDX_HASH SYS_P66 USABLE6 rows selected.
注意,全域性分割槽索引,在維護分割槽時,可能造成索引無法使用,需要檢查分割槽索引狀態及重建無效索引.
alter index sf2021_idx_hash rebuild partition sys_p66;
字首分字首索引
--在本地分割槽建立唯一索引時,索引必須包括分割槽列,例如create unique index sf2021_idx_pk on sf2021(sf_id,insert_time) local;--當需要定義主鍵約束時,首先建立一個唯一索引,再新增約束(分步執行,可以單獨管理),如create unique index sf2021_idx_pk on sf2021(sf_id,insert_time) local;alter table sf2021 add constraint sf2021_idx_pk primary key(sf_id,insert_time);
維護分割槽表及索引
--新增分割槽alter table sf2021 add partition p202109 values less than (to_date('202108','yyyymm')) tablespace users;--截斷分割槽alter table sf2021 truncate partition p202101;--刪除分割槽alter table sf2021 drop partition p202101;--移動分割槽alter table sf2021 move partition p202106 tablespace mytest;--拆分分割槽alter table sf2021 split partition pmax at('2021/09') into (partition p202109 tablespace mytest,partition pmax tablespace mytest);--合併分割槽alter table sf2021 merge partitions p202101,pmax into partition pmax;--檢視分割槽相關索引情況set lines 200 pages 999select index_name,null partition_name,status from dba_indexes where table_name='SF2021' and partitioned='NO'union allselect index_name,partition_name,status from dba_ind_partitionswhere index_name in (select index_name from dba_indexes where table_name='SF2021') order by 1,2,3;
表級分割槽操作對分割槽索引的影響
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70014851/viewspace-2867421/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle索引詳解 分割槽索引Oracle索引
- Oracle的分割槽索引技術Oracle索引
- oracle分割槽partition及分割槽索引partition index(一)Oracle索引Index
- oracle分割槽及分割槽索引partition_partition index_維護(一)Oracle索引Index
- oracle分割槽及分割槽索引partition_partition index_維護(二)Oracle索引Index
- oracle分割槽及分割槽索引partition_partition index_維護(三)Oracle索引Index
- oracle分割槽及分割槽索引partition_partition index_維護(四)Oracle索引Index
- index_oracle索引梳理系列及分割槽表梳理IndexOracle索引
- 分割槽索引之本地(local index)索引和全域性索引(global index)索引Index
- Oracle 分割槽(partition)技術Oracle
- Oracle索引分割槽Oracle索引
- oracle分割槽及分割槽索引partition_partition index_維護(五)_快捷方法Oracle索引Index
- Oracle分割槽表及分割槽索引Oracle索引
- 2萬字詳解Oracle分割槽表技術,太頂了Oracle
- oracle 分割槽表詳解Oracle
- oracle表分割槽詳解Oracle
- oracle分割槽表詳解Oracle
- Oracle 表分割槽詳解Oracle
- 簡單ORACLE分割槽表、分割槽索引Oracle索引
- oracle分割槽交換(exchange)技術Oracle
- Oracle表分割槽技術概述Oracle
- oracle分割槽索引(二)Oracle索引
- oracle分割槽索引(一)Oracle索引
- oracle 建立所有分割槽索引Oracle索引
- Oracle分割槽之五:建立分割槽索引總結Oracle索引
- 深入學習Oracle分割槽表及分割槽索引Oracle索引
- 全面認識oracle分割槽表及分割槽索引Oracle索引
- mysql表分割槽技術詳細介紹MySql
- 【原創】ORACLE 分割槽與索引Oracle索引
- Oracle帶區域性分割槽索引的分割槽表刪除舊分割槽新增新分割槽Oracle索引
- Oracle分割槽表基礎運維-06分割槽表索引Oracle運維索引
- oracle本地分割槽索引跨分割槽對成本的影響Oracle索引
- Oracle表分割槽詳解(優缺點)Oracle
- 【學習筆記】分割槽表和分割槽索引——管理索引分割槽(四)筆記索引
- 分割槽索引(Partition Index)與SQL執行計劃(中)索引IndexSQL
- 分割槽索引(Partition Index)與SQL執行計劃(下)索引IndexSQL
- 分割槽索引(Partition Index)與SQL執行計劃(上)索引IndexSQL
- Oracle分割槽表全域性索引新增分割槽時不會失效Oracle索引