是否可以只创建部分分区上的本地索引

可能在特定环境下,需要在分区表的部分分区上创建索引(减少创建索引时间),是否可能?

可以通过如下方式实现:
数据库版本:
SQL> select * from v$version;
 
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
PL/SQL Release 11.2.0.3.0 - Production
CORE 11.2.0.3.0 Production
TNS for IBM/AIX RISC System/6000: Version 11.2.0.3.0 - Production
NLSRTL Version 11.2.0.3.0 - Production
 

1,创建分区表

CREATE TABLE range_part(
id NUMBER(10),
crt_date DATE NOT NULL
)
PARTITION BY RANGE(crt_date)
(
PARTITION yr0 VALUES LESS THAN (TO_DATE('20140101','YYYYMMDD')),
PARTITION yr1 VALUES LESS THAN (TO_DATE('20150101','YYYYMMDD')),
PARTITION yr2 VALUES LESS THAN (TO_DATE('20160101','YYYYMMDD')),
PARTITION yr3 VALUES LESS THAN (TO_DATE('20170101','YYYYMMDD')),
PARTITION yrm VALUES LESS THAN (MAXVALUE)
);

insert into range_part
select rownum id, add_months(to_date('20130101', 'YYYYMMDD'), rownum)
  from dual
connect by level < 100;
commit;


2,创建索引
2.1 创建UNUSABLE索引
CREATE INDEX idx_range_part ON range_part(id) LOCAL UNUSABLE;


SQL> select index_name,partitioned,visibility from user_indexes where index_name = 'IDX_RANGE_PART';
 
INDEX_NAME                     PARTITIONED VISIBILITY
------------------------------ ----------- ----------
IDX_RANGE_PART                 YES         VISIBLE
 
 
SQL> select index_name,partitioning_type,partition_count,locality from user_part_indexes where index_name = 'IDX_RANGE_PART';
 
INDEX_NAME                     PARTITIONING_TYPE PARTITION_COUNT LOCALITY
------------------------------ ----------------- --------------- --------
IDX_RANGE_PART                 RANGE                           5 LOCAL
 

SQL> select index_name,partition_name,status,segment_created from user_ind_partitions where index_name='IDX_RANGE_PART';
 
INDEX_NAME                     PARTITION_NAME                 STATUS   SEGMENT_CREATED
------------------------------ ------------------------------ -------- ---------------
IDX_RANGE_PART                 YR0                            UNUSABLE NO
IDX_RANGE_PART                 YR1                            UNUSABLE NO
IDX_RANGE_PART                 YR2                            UNUSABLE NO
IDX_RANGE_PART                 YR3                            UNUSABLE NO
IDX_RANGE_PART                 YRM                            UNUSABLE NO

2.2 重建分区索引
ALTER INDEX idx_range_part REBUILD PARTITION yr1;
ALTER INDEX idx_range_part REBUILD PARTITION yr2;

SQL> select index_name,partition_name,status,segment_created from user_ind_partitions where index_name='IDX_RANGE_PART';
 
INDEX_NAME                     PARTITION_NAME                 STATUS   SEGMENT_CREATED
------------------------------ ------------------------------ -------- ---------------
IDX_RANGE_PART                 YR0                            UNUSABLE NO
IDX_RANGE_PART                 YR1                            USABLE   YES
IDX_RANGE_PART                 YR2                            USABLE   YES
IDX_RANGE_PART                 YR3                            UNUSABLE NO
IDX_RANGE_PART                 YRM                            UNUSABLE NO


2.3 修改分区索引为UNUSABLE
ALTER INDEX idx_range_part MODIFY PARTITION yr1 UNUSABLE;
 
SQL> select index_name,partition_name,status,segment_created from user_ind_partitions where index_name='IDX_RANGE_PART';
 
INDEX_NAME                     PARTITION_NAME                 STATUS   SEGMENT_CREATED
------------------------------ ------------------------------ -------- ---------------
IDX_RANGE_PART                 YR0                            UNUSABLE NO
IDX_RANGE_PART                 YR1                            UNUSABLE NO
IDX_RANGE_PART                 YR2                            USABLE   YES
IDX_RANGE_PART                 YR3                            UNUSABLE NO
IDX_RANGE_PART                 YRM                            UNUSABLE NO

 


-------------------------10.2.1对比测试

数据库版本:
SQL>  select * from v$version;
 
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE 10.2.0.1.0 Production
TNS for Linux: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production

效果相同,只是不支持延迟创建段和索引可见性(分别对应user_ind_partitions.SEGMENT_CREATED,user_indexes.visibility)。

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

转载于:http://blog.itpub.net/18922393/viewspace-1069658/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值