【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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- index_oracle索引梳理系列及分割槽表梳理IndexOracle索引
- 2萬字詳解Oracle分割槽表技術,太頂了Oracle
- oracle分割槽交換(exchange)技術Oracle
- 【INDEX】Oracle19c 自動索引技術初探IndexOracle索引
- Oracle分割槽表基礎運維-06分割槽表索引Oracle運維索引
- Oracle優化案例-分割槽索引之無字首索引(六)Oracle優化索引
- Oracle Partition 分割槽詳細總結Oracle
- oracle分割槽表和分割槽表exchangeOracle
- Hive動態分割槽詳解Hive
- oracle分割槽表和非分割槽表exchangeOracle
- [oracle] expdp 匯出分割槽表的分割槽Oracle
- 移動分割槽表和分割槽索引的表空間索引
- Oracle分割槽表基礎運維-07增加分割槽(2 HASH分割槽)Oracle運維
- Oracle分割槽表基礎運維-07增加分割槽(1範圍分割槽)Oracle運維
- ORACLE分割槽表梳理系列Oracle
- E6 資料庫分割槽技術資料庫
- oracle 分割槽表move和包含分割槽表的lob moveOracle
- Oracle分割槽表基礎運維-09刪除分割槽Oracle運維
- Oracle分割槽表基礎運維-05組合分割槽Oracle運維
- Oracle分割槽表基礎運維-02範圍分割槽Oracle運維
- Oracle分割槽表基礎運維-03HASH分割槽Oracle運維
- ORACLE 分割槽索引UNUSABLE導致的DML操作失敗引起的血案Oracle索引
- 記一次Oracle分割槽表全域性索引重建的過程Oracle索引
- oracle交換分割槽所引起的索引失效問題探究測試Oracle索引
- Oracle分割槽表基礎運維-07增加分割槽(3列表分割槽)Oracle運維
- Oracle12c:建立主分割槽、子分割槽,實現自動分割槽插入效果Oracle
- 澤拓科技趙偉 KunlunBase 資料分割槽方案和彈性擴縮容技術詳解
- Oracle分割槽表基礎運維-04列表分割槽Oracle運維
- 【INDEX】Oracle 索引常見知識梳理IndexOracle索引
- 從10046看Oracle分割槽裁剪Oracle
- SQL優化案例-分割槽索引之無字首索引(六)SQL優化索引
- 增加表分割槽時,為local分割槽索引指定不同表空間的方法索引
- SQL最佳化案例-分割槽索引之無字首索引(六)SQL索引
- Mysql資料分片技術(一)——初識表分割槽MySql
- Oracle中的虛擬列索引-nosegment indexOracle索引Index
- Oracle分割槽表基礎運維-01分割槽表分類Oracle運維
- 對oracle分割槽表的理解整理Oracle
- oracle將表配置為分割槽表Oracle