1. 程式人生 > >oracle的局部本地分區索引

oracle的局部本地分區索引

reat ins 證明 ble system nullable log rac list

環境:oracle 12.2.0.1

註:未確定10g,11g是否有這些特性。現在基本不用10g,主要用12c,11g。

毫無疑問,這種 特性對於dba或者實施人員而言顯得很重要,尤其當你的數據庫主要用於olap或者dw(數據倉庫)環境的時候。

很多時候,如果需要在一個巨大的表上創建新的索引,例如這個表示一個基站性能數據,可能整張表有3-5億條。

如果按照以往的操作,明顯是非常可怕的事情:

  • 消耗巨量的時間
  • 不一定成功
  • 可能影響業務的進行

然後,有了局部本地分區索引就不一樣了。

以下就是本人的試驗!

 1 create table t_tab_columns(
 2 owner              varchar2
(128) NOT NULL, 3 table_name varchar2(128) NOT NULL, 4 column_name varchar2(128) NOT NULL, 5 data_type varchar2(128), 6 data_type_mod varchar2(3), 7 data_type_owner varchar2(128), 8 data_length number, 9 data_precision number,
10 data_scale number, 11 nullable varchar2(1), 12 column_id number, 13 default_length number, 14 num_distinct number, 15 collation varchar2(100) 16 ) 17 partition by list(owner) 18 ( 19 partition p_sys values (SYS
,SYSTEM) , 20 partition p_sys_other values(MDSYS,CTXSYS,DVSYS,WMSYS,LBACSYS) indexing off, 21 partition p_USERS values (LZF,EMCUSER) 22 ); 23 24 --- 25 INSERT INTO t_tab_columns 26 select 27 owner, 28 table_name, 29 column_name, 30 data_type, 31 data_type_mod, 32 data_type_owner, 33 data_length, 34 data_precision, 35 data_scale, 36 nullable, 37 column_id, 38 default_length, 39 num_distinct, 40 collation 41 from dba_tab_columns 42 WHERE OWNER IN (SYS,SYSTEM,MDSYS,CTXSYS,DVSYS,WMSYS,LBACSYS,LZF,EMCUSER); 43 commit; 44 ---2.1創建索引 45 create index idx_Tab_columns_colname on t_tab_columns(column_name) local indexing partial 46 --驗證 47 select segment_name,partition_name from user_segments where segment_name=IDX_TAB_COLUMNS_COLNAME; 48 SEGMENT_NAME PARTITION_NAME 49 IDX_TAB_COLUMNS_COLNAME P_SYS 50 IDX_TAB_COLUMNS_COLNAME P_USERS 51 --**** 證明:有起到作用 52 --2.2 創建索引而不帶 indexing partial 53 create index idx_Tab_columns_dt on t_tab_columns(data_type) local ; 54 --驗證 55 select segment_name,partition_name from user_segments where segment_name=IDX_TAB_COLUMNS_DT; 56 SEGMENT_NAME PARTITION_NAME 57 IDX_TAB_COLUMNS_DT P_SYS 58 IDX_TAB_COLUMNS_DT P_SYS_OTHER 59 IDX_TAB_COLUMNS_DT P_USERS 60 --**** 證明:是否創建索引完全取決於 indexing partial 字句。 61 --2.3 如果把本來可以索引的,調整為不可索引,會如何了? 62 alter table t_tab_columns modify partition p_users indexing off; 63 --驗證 64 select segment_name,partition_name from user_segments where segment_name=IDX_TAB_COLUMNS_COLNAME; 65 SEGMENT_NAME PARTITION_NAME 66 IDX_TAB_COLUMNS_COLNAME P_SYS 67 68 select segment_name,partition_name from user_segments where segment_name=IDX_TAB_COLUMNS_DT; 69 SEGMENT_NAME PARTITION_NAME 70 IDX_TAB_COLUMNS_DT P_SYS 71 IDX_TAB_COLUMNS_DT P_SYS_OTHER 72 IDX_TAB_COLUMNS_DT P_USERS 73 --**** 證明:只影響采用了 indexing partial的索引,會刪除對應分區的索引。 74 75 --2.4 如果把本來不可以索引的,調整為可索引,會如何了? 76 alter table t_tab_columns modify partition p_users indexing on; 77 --驗證 78 select segment_name,partition_name from user_segments where segment_name=IDX_TAB_COLUMNS_COLNAME; 79 SEGMENT_NAME PARTITION_NAME 80 IDX_TAB_COLUMNS_COLNAME P_SYS 81 IDX_TAB_COLUMNS_COLNAME P_USERS 82 select segment_name,partition_name from user_segments where segment_name=IDX_TAB_COLUMNS_DT; 83 結果略。 84 --**** 證明:修改表分區的indexing屬性,只影響采用了 indexing partial的索引,會重建對應分區的索引。

通過修改所有分區的indexing 屬性(為off),然後創建indexing partial對的本地索引,最後通過一個定時任務把對應分區修改為indexing on,就可以逐步創建每個分區的索引。

oracle的局部本地分區索引