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;
        

  



 



  

  

  

 


  

  

  


  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM