分区索引--global和local,prefix和non-prefix

1.分区表和分区索引的概念是分开的。分区表上建的索引就是分区索引,是错误的。
2.global分区索引也是可以建在非分区表上的,local分区索引只能建在分区表上。
3.关键字global和local都是针对分区索引,虽然非分区索引也可以用global关键字,但无意义。
4.global分区索引只能是prefix前缀的。
5.prefix前缀和non-prefix,global分区索引是否为prefix与索引键和索引分区的分区列有关。
6.local分区索引可以是prefix前缀的,也可以是non-prefix非前缀的。
7.prefix前缀和non-prefix,local分区索引是否为prefix与索引键和表分区列有关。

  1. ------下面进行测试说明:
  2. --建立普通表
  3. create table scott.test_normal
  4. as select * from dba_objects where object_id is not null;
  5. --建立分区表
  6. create table scott.test_partition
  7. partition by RANGE (object_id)
  8. (
  9. partition p1 values less than (10000) ,
  10. partition p2 values less than (20000) ,
  11. partition p3 values less than (maxvalue)
  12. )
  13. as select * from dba_objects where object_id is not null;

  14. ----1.分区表和分区索引的概念是分开的。分区表上建的索引就是分区索引,是错误的。
  15. ----2.global分区索引也是可以建在非分区表上的,local分区索引只能建在分区表上。
  16. --普通表上创建global分区索引
  17. create index scott.idx_test_normal_01
  18. on scott.test_normal(object_id) global
  19. partition by RANGE (object_id)
  20. (
  21. partition p1 values less than (10000) ,
  22. partition p2 values less than (20000) ,
  23. partition p3 values less than (maxvalue)
  24. );

  25. select index_owner,index_name,partition_name from dba_ind_partitions
  26. where index_name=upper('idx_test_normal_01');
  27. /*
  28. SCOTT    IDX_TEST_NORMAL_01    P1
  29. SCOTT    IDX_TEST_NORMAL_01    P2
  30. SCOTT    IDX_TEST_NORMAL_01    P3
  31. */

  32. --普通表上创建local分区索引
  33. create index scott.idx_test_normal_02
  34. on scott.test_normal(object_id) local;
  35. /*
  36. ORA-14016 underlying table of a LOCAL partitioned index must be partitioned
  37. */

  38. ----3.关键字global和local都是针对分区索引,虽然非分区索引也可以用global关键字,但无意义。
  39. --创建普通索引
  40. create index scott.idx_test_normal_02
  41. on scott.test_normal(object_name) ;
  42. --创建加global关键字的索引
  43. create index scott.idx_test_normal_03
  44. on scott.test_normal(owner) global;
  45. select dbms_metadata.get_ddl('INDEX\','IDX_TEST_NORMAL_02','SCOTT') from dual;
  46. /*
  47.   CREATE INDEX \"SCOTT\".\"IDX_TEST_NORMAL_02\" ON \"SCOTT\".\"TEST_NORMAL\" (\"OBJECT_NAME\")
  48.   PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
  49.   STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  50.   PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
  51.   TABLESPACE \"USERS\"
  52. */
  53. select dbms_metadata.get_ddl('INDEX\','IDX_TEST_NORMAL_03','SCOTT') from dual;
  54. /*
  55.   CREATE INDEX \"SCOTT\".\"IDX_TEST_NORMAL_03\" ON \"SCOTT\".\"TEST_NORMAL\" (\"OWNER\")
  56.   PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
  57.   STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  58.   PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
  59.   TABLESPACE \"USERS\"
  60. */

  61. ----4.global分区索引只能是prefix前缀的。
  62. ----5.prefix前缀和non-prefix,global分区索引是否为prefix与索引键和索引分区的分区列有关。
  63. --创建global prefix前缀的索引
  64. create index scott.idx_test_partition_01
  65. on scott.test_partition(data_object_id) global
  66. partition by RANGE (data_object_id)
  67. (
  68. partition p1 values less than (10000) ,
  69. partition p2 values less than (20000) ,
  70. partition p3 values less than (maxvalue)
  71. );
  72. select index_owner,index_name,partition_name from dba_ind_partitions
  73. where index_name=upper('idx_test_partition_01');
  74. /*
  75. SCOTT    IDX_TEST_PARTITION_01    P1
  76. SCOTT    IDX_TEST_PARTITION_01    P2
  77. SCOTT    IDX_TEST_PARTITION_01    P3
  78. */

  79. --创建global prefix非前缀的索引
  80. create index scott.idx_test_partition_02
  81. on scott.test_partition(owner) global
  82. partition by RANGE (object_id)
  83. (
  84. partition p1 values less than (10000) ,
  85. partition p2 values less than (20000) ,
  86. partition p3 values less than (maxvalue)
  87. );
  88. /*
  89. ORA-14038 GLOBAL partitioned index must be prefixed
  90. */

  91. ----6.local分区索引可以是prefix前缀的,也可以是non-prefix非前缀的。
  92. ----7.prefix前缀和non-prefix,local分区索引是否为prefix与索引键和表分区列有关。
  93. --local prefix前缀
  94. create index scott.idx_test_partition_03
  95. on scott.test_partition(object_id,data_object_id) local;

  96. select index_owner,index_name,partition_name from dba_ind_partitions
  97. where index_name=upper('idx_test_partition_03');
  98. /*
  99. SCOTT    IDX_TEST_PARTITION_01    P1
  100. SCOTT    IDX_TEST_PARTITION_01    P2
  101. SCOTT    IDX_TEST_PARTITION_01    P3
  102. */

  103. --local prefix非前缀
  104. create index scott.idx_test_partition_04
  105. on scott.test_partition(data_object_id,owner) local;

  106. select index_owner,index_name,partition_name from dba_ind_partitions
  107. where index_name=upper('idx_test_partition_04');
  108. /*
  109. SCOTT    IDX_TEST_PARTITION_04    P2
  110. SCOTT    IDX_TEST_PARTITION_04    P3
  111. SCOTT    IDX_TEST_PARTITION_04    P1
  112. */


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28539951/viewspace-1562633/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/28539951/viewspace-1562633/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值