设为首页 收藏本站
查看: 752|回复: 0

[经验分享] Oracle分区键与分区本地索引

[复制链接]

尚未签到

发表于 2016-8-4 09:36:59 | 显示全部楼层 |阅读模式
  关于全局索引和本地索引的优缺点,分别应该在什么情况下使用,这方面的资料很多,本文不作讨论。本文讨论一种特殊情况,即建立在分区键之上的本地索引。9i也算是很老的Oracle版本了,只是很多系统包括很多大型的核心的系统都在用,因此本文介绍建立在分区键列上的本地索引存在的问题。下面是一些测试: 
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->1   1   SQL> create table t1 ( a int, b varchar2(300)) partition by range(a)  
2   2  (  
3   3   partition p01 values less than (1000),  
4   4   partition p02 values less than (2000),  
5   5   partition p03 values less than (3000),  
6   6   partition p04 values less than (4000),  
7   7   partition p05 values less than (5000),  
8   8   partition p06 values less than (6000),  
9   9   partition p07 values less than (7000),  
10 10   partition p08 values less than (8000),  
11 11   partition p09 values less than (9000),  
12 12   partition p10 values less than (10000),  
13 13   partition p11 values less than (11000),  
14 14   partition p12 values less than (12000),  
15 15   partition p13 values less than (13000),  
16 16   partition p14 values less than (14000),  
17 17   partition p15 values less than (15000),  
18 18   partition p16 values less than (16000),  
19 19   partition p17 values less than (17000),  
20 20   partition p18 values less than (18000),  
21 21   partition p19 values less than (19000),  
22 22   partition p20 values less than (20000)  
23 23  )  
24 24  /  
25   
26 表已创建。  
27   
28 SQL> insert into t1 select rownum,lpad('x',200,'x') from dual connect by rownum<20000;  
29   
30 已创建19999行。  
31   
32 SQL> commit;  
33   
34 提交完成。  
35   
36 SQL> insert /*+ append */ into t1 select * from t1;  
37   
38 已创建19999行。  
39   
40 SQL> commit;  
41   
42 提交完成。  
43   
44 SQL> insert /*+ append */ into t1 select * from t1;  
45   
46 已创建39998行。  
47   
48 SQL> commit;  
49   
50 提交完成。  
51   
52 SQL> insert /*+ append */ into t1 select * from t1;  
53   
54 已创建79996行。  
55   
56 SQL> commit;  
57   
58 提交完成。  
59   
60 SQL> insert /*+ append */ into t1 select * from t1;  
61   
62 已创建159992行。  
63   
64 SQL> commit;  
65   
66 提交完成。  
67   
68 SQL> insert /*+ append */ into t1 select * from t1;  
69   
70 已创建319984行。  
71   
72 SQL> commit;  
73   
74 提交完成。

  
  首先建立一个测试范围分区表,分区键列是”a”,共20个分区,在这个测试表中生成约64万行数据。下面在列a上建本地索引并收集统计信息: 
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->1 SQL> create index t1_idx on t1(a) local;  
2   
3 索引已创建。  
4   
5 SQL> exec dbms_stats.gather_table_stats(user,'T1',  
6     method_opt=>'for all columns size 1',cascade=>true);  
7   
8 PL/SQL 过程已成功完成。  
9 SQL> @sosi  
10   
11 Please enter Name of Table Owner (Null = TEST):  
12 Please enter Table Name to show Statistics for: t1  
13   
14 ***********  
15 Table Level  
16 ***********  
17   
18 Table                   Number                 Empty  
19 Name                   of Rows   Blocks       Blocks  
20 --------------- -------------- -------- ------------  
21 T1                     639,968   18,880            0  
22   
23 Column                    Column                       Distinct            Number       Number  
24 Name                      Details                        Values   Density Buckets        Nulls  
25 ------------------------- ------------------------ ------------ --------- ------- ------------  
26 A                         NUMBER(22)                     19,999   .000050       1            0  
27 B                         VARCHAR2(300)                       1  1.000000       1            0  
28   
29                               B  
30 Index                      Tree     Leaf       Distinct         Number      Cluster  
31 Name            Unique    Level     Blks           Keys        of Rows       Factor  
32 --------------- --------- ----- -------- -------------- -------------- ------------  
33 T1_IDX          NONUNIQUE     1    1,390         19,999        639,968      639,968  
34   
35 Index           Column                     Col Column  
36 Name            Name                       Pos Details  
37 --------------- ------------------------- ---- ------------------------  
38 T1_IDX          A                            1 NUMBER(22)  
39   
40 ***************  
41 Partition Level  
42 ***************  
43   
44   Part Partition               Number                 Empty  
45    Pos Name                   of Rows   Blocks       Blocks  
46 ------ --------------- -------------- -------- ------------  
47      1 P01                     31,968      944            0  
48      2 P02                     32,000      944            0  
49      3 P03                     32,000      944            0  
50      4 P04                     32,000      944            0  
51      5 P05                     32,000      944            0  
52      6 P06                     32,000      944            0  
53      7 P07                     32,000      944            0  
54      8 P08                     32,000      944            0  
55      9 P09                     32,000      944            0  
56     10 P10                     32,000      944            0  
57     11 P11                     32,000      944            0  
58     12 P12                     32,000      944            0  
59     13 P13                     32,000      944            0  
60     14 P14                     32,000      944            0  
61     15 P15                     32,000      944            0  
62     16 P16                     32,000      944            0  
63     17 P17                     32,000      944            0  
64     18 P18                     32,000      944            0  
65     19 P19                     32,000      944            0  
66     20 P20                     32,000      944            0  
67                                     B  
68 Index           Partition        Tree     Leaf       Distinct         Number  
69 Name            Name            Level     Blks           Keys        of Rows  
70 --------------- --------------- ----- -------- -------------- --------------  
71 T1_IDX          P01                 1       67            999         31,968  
72 T1_IDX          P02                 1       67          1,000         32,000  
73 T1_IDX          P03                 1       67          1,000         32,000  
74 T1_IDX          P04                 1       67          1,000         32,000  
75 T1_IDX          P05                 1       67          1,000         32,000  
76 T1_IDX          P06                 1       67          1,000         32,000  
77 T1_IDX          P07                 1       67          1,000         32,000  
78 T1_IDX          P08                 1       67          1,000         32,000  
79 T1_IDX          P09                 1       67          1,000         32,000  
80 T1_IDX          P10                 1       67          1,000         32,000  
81 T1_IDX          P11                 1       72          1,000         32,000  
82 T1_IDX          P12                 1       72          1,000         32,000  
83 T1_IDX          P13                 1       72          1,000         32,000  
84 T1_IDX          P14                 1       72          1,000         32,000  
85 T1_IDX          P15                 1       72          1,000         32,000  
86 T1_IDX          P16                 1       72          1,000         32,000  
87 T1_IDX          P17                 1       72          1,000         32,000  
88 T1_IDX          P18                 1       72          1,000         32,000  
89 T1_IDX          P19                 1       72          1,000         32,000  
90 T1_IDX          P20                 1       72          1,000         32,000  

  
  
  下面执行查询:
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->1 SQL> set arraysize 1000  
2 SQL> set autot traceonly  
3 SQL> select * from t1 where a=1000;  
4   
5 已选择32行。  
6   
7 Execution Plan  
8 ----------------------------------------------------------  
9    0      SELECT STATEMENT Optimizer=CHOOSE (Cost=33 Card=32 Bytes=652  
10           8)  
<span st

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-252593-1-1.html 上篇帖子: oracle中的define,declare,variable的区别 下篇帖子: oracle 游标以及游标变量(1)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表