環境:oracle 12.2.0.1
注:未確定10g,11g是否有這些特性。現在基本不用10g,主要用12c,11g。
毫無疑問,這種 特性對於dba或者實施人員而言顯得很重要,尤其當你的資料庫主要用於olap或者dw(資料倉儲)環境的時候。
很多時候,如果需要在乙個巨大的表上建立新的索引,例如這個表示乙個基站效能資料,可能整張表有3-5億條。
如果按照以往的操作,明顯是非常可怕的事情:
然後,有了區域性本地分割槽索引就不一樣了。
以下就是本人的試驗!
1create
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);
2324---
25insert
into
t_tab_columns
26select
27owner,
28table_name,
29column_name,
30data_type,
31data_type_mod,
32data_type_owner,
33data_length,
34data_precision,
35data_scale,
36nullable,
37column_id,
38default_length,
39num_distinct,
40collation
41from
dba_tab_columns
42where owner in ('
sys','
system
','mdsys
','ctxsys
','dvsys
','wmsys
','lbacsys
','lzf
','emcuser');
43commit;44
---2.1建立索引
45create
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';
48segment_name partition_name
49idx_tab_columns_colname p_sys
50idx_tab_columns_colname p_users
51--
**** 證明:有起到作用
52--
2.2 建立索引而不帶 indexing partial
53create
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';
56segment_name partition_name
57idx_tab_columns_dt p_sys
58idx_tab_columns_dt p_sys_other
59idx_tab_columns_dt p_users
60--
**** 證明:是否建立索引完全取決於 indexing partial 字句。
61--
2.3 如果把本來可以索引的,調整為不可索引,會如何了?
62alter
table t_tab_columns modify partition p_users indexing off;63
--驗證
64select segment_name,partition_name from user_segments where segment_name=
'idx_tab_columns_colname';
65segment_name partition_name
66idx_tab_columns_colname p_sys
6768
select segment_name,partition_name from user_segments where segment_name=
'idx_tab_columns_dt';
69segment_name partition_name
70idx_tab_columns_dt p_sys
71idx_tab_columns_dt p_sys_other
72idx_tab_columns_dt p_users
73--
**** 證明:只影響採用了 indexing partial的索引,會刪除對應分割槽的索引。
7475
--2.4 如果把本來不可以索引的,調整為可索引,會如何了?
76alter
table t_tab_columns modify partition p_users indexing on;77
--驗證
78select segment_name,partition_name from user_segments where segment_name=
'idx_tab_columns_colname';
79segment_name partition_name
80idx_tab_columns_colname p_sys
81idx_tab_columns_colname p_users
82select 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分割槽表中本地索引和全域性索引的適用場景
背景 分割槽表建立好了之後,如果需要最大化分割槽表的效能就需要結合索引的使用,分割槽表有兩種索引 本地索引和全域性索引。既然存在著兩種的索引型別,相信存在即合理。既然存在就會有存在的原因,也就是在特定的場景中就更能發揮出索引的效能的 本文件通過測試,總結出兩種索引的適合的場景 測試環境 資料庫版本 ...
Oracle分割槽索引
表可以按 range hash list 分割槽,表分割槽後,其上的索引和普通表上的索引有所不同,oracle 對於分割槽表上的索引分為 2類,即區域性索引和全域性索引,下面分別對這 2種索引的特點和侷限性做個總結。1.區域性索引一定是分割槽索引,分割槽鍵等同於表的分割槽鍵,分割槽數等同於表的分割槽...
oracle分割槽索引
前兩天做乙個大的分割槽表的資料清理,split 分割槽後,忘記rebuild 索引,導致生產庫查詢的分割槽表非常的緩慢 對分割槽表某個分割槽做split 如果沒有在alter table 語句最後加上update indexes,被 出的兩個分割槽的本地索引和整個表的全域性索引都會失效。當根據索引字...