oracle的區域性本地分割槽索引

2022-08-02 01:15:10 字數 4398 閱讀 8153

環境: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);

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,被 出的兩個分割槽的本地索引和整個表的全域性索引都會失效。當根據索引字...