oracle 非分区索引,全局分区索引和本地分区索引

1.如果按照索引是否分区作为划分依据,Oracle 的索引类型可以分为非分区索引,全局分区索引和本地分区索引。

 2.案例一

--创建非分区表

create table text01
 (num1 number, 
 num2 number,
str1 varchar2(10),
str2 varchar2(20))tablespace yysms_cache ;

       
-- 写入数据
insert into text01
select dbms_random.random() as num1,--随机整数
round(dbms_random.value(0,1000))as num2, 1-1000的随机整数
dbms_random.string(opt => 'A', len => 1) as str1, 随机一位字符
dbms_random.string(opt => 'p', len => 10) as str2 随机10位字符
from dual 
connect by rownum<100;--循环插入  共插入99行数据
commit;
--试图创建本地分区索引 报错
create index ix_text01_par on text01(num1)
local(partition p1,
       partition p2,
       partition p3);
--ORA-14016必须对 LOCAL 分区索引的基础表进行分区。该错误的原因是对非分区表新建索引时采用了LOCAL的参数
---创建普通索引 
create index ix_text01_par on text01(num01);
--创建 全局分区索引
CREATE INDEX ix_test01_par ON test01(num2)
   GLOBAL PARTITION BY RANGE (num2)
      (PARTITION p1 VALUES LESS THAN (10000),
       PARTITION p2 VALUES LESS THAN (55000),
       PARTITION p3 VALUES LESS THAN (MAXVALUE));
结论:非分区表可以创建普通索引和全局分区索引不能创建本地分区索引。
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------

3.案例二
--创建分区表
create table text02(
num1 number,
num2 number,
str1 varchar2(10),
str2 varchar2(20)
) partition by range(num2)
(
partition p1 values less than (10000),
partition p2 values less than (20000),
partition p3 values less than (50000),
partition p4 values less than (70000),
partition p5 values less than (maxvalue)
);

 --试图创建本地分区索引

CREATE INDEX ix_text02_par ON test_partiton_02(num) 
local (PARTITION p1,
       PARTITION p2,
       PARTITION p3,
       PARTITION p4,
       PARTITION p5
       );
--索引的分区数必须等于基础表的分区数
--drop index ix_text02_par;
CREATE INDEX ix_text02_par ON text_partiton_02(num1) local;--和上面的创建方式等效
--drop index ix_text02_par;
CREATE INDEX ix_text02_par ON text02(num1) ; --默认创建的是 非分区索引,分区索引才分 全局索引还是本地索引 ;
---创建全局分区索引
CREATE INDEX ix_text02_par ON text02(num2)
   GLOBAL PARTITION BY RANGE (num2)
      (PARTITION p1 VALUES LESS THAN (10000),
       PARTITION p2 VALUES LESS THAN (55000),
       PARTITION p3 VALUES LESS THAN (MAXVALUE));
-- 写入数据
insert into text02
select dbms_random.random() as num1,--随机整数
round(dbms_random.value(0,1000))as num2, 1-1000的随机整数
dbms_random.string(opt => 'A', len => 1) as str1, 随机一位字符
dbms_random.string(opt => 'p', len => 10) as str2 随机10位字符
from dual 
connect by rownum<100;--循环插入  共插入99行数据
commit;

 

4.分析表
analyze table text02 compute statistics;
--- 结论 改变分区 普通索引和全局分区索引都会失效 只有本地分区索引好使
5.最好用以下语句查看索引的定义语句
select dbms_metadata.get_ddl(object_type => 'INDEX',
                             name        => 'IX_TEXT02_PAR')
  FROM DUAL;
        

  



 



  

  

  

 


  

  

  


  

猜你喜欢

转载自www.cnblogs.com/lyywml/p/12176707.html
今日推荐