ITPub博客

首页 > 数据库 > Oracle > Oracle10g Database Table Partition Testcase-5 严于律己

Oracle10g Database Table Partition Testcase-5 严于律己

Oracle 作者:123321123456756 时间:2014-03-05 15:46:57 0 删除 编辑

 

8.比较全局普通索引和本地非前缀索引性能:

 

CREATE  INDEX IDX_HK_P_MER_CODE ON TIPS_TRD_HK_P(MER_CODE) LOCAL;

 

select  from ips2.TIPS_TRD_HK_P where MER_CODE='010870'

Plan

SELECT STATEMENT ALL_ROWS Cost: 16 Bytes: 17,202 Cardinality: 6

 

PARTITION RANGE ALL Cost: 16 Bytes: 17,202 Cardinality: 6 Partition #: 1 Partitions accessed #1 - #7

 

 

TABLE ACCESS BY LOCAL INDEX ROWID TABLE IPS2.TIPS_TRD_HK_P Cost: 16 Bytes: 17,202 Cardinality: 6Partition #: 1 Partitions accessed #1 - #7

 

 

 

INDEX RANGE SCAN INDEX IPS2.IDX_HK_P_MER_CODE Cost: 8 Cardinality: 6 Partition #: 1 Partitions accessed #1 - #7

78ms

 

create index idx_hk_p_mer_code_b ON TIPS_TRD_HK_P(MER_CODE) ;

select  from ips2.TIPS_TRD_HK_P where MER_CODE='010870'

Plan

SELECT STATEMENT ALL_ROWS Cost: 11 Bytes: 17,202 Cardinality: 6

 

TABLE ACCESS BY GLOBAL INDEX ROWID TABLE IPS2.TIPS_TRD_HK_P Cost: 11 Bytes: 17,202 Cardinality: 6Partition #: 1 Partition access computed by row location

 

 

INDEX RANGE SCAN INDEX IPS2.IDX_HK_P_MER_CODE_B Cost: 3 Cardinality: 6

78ms

 

 

CREATE  INDEX IDX_HK_P_MER_CODE ON TIPS_TRD_HK_P(MER_CODE) LOCAL;

select  from ips2.TIPS_TRD_HK_P where HB_CREATETIME>SYSDATE-1900 AND MER_CODE='010870'

Plan

SELECT STATEMENT ALL_ROWS Cost: 1,810 Bytes: 564,799 Cardinality: 197

 

PARTITION RANGE ITERATOR Cost: 1,810 Bytes: 564,799 Cardinality: 197 Partition #: 1 Partitions determined by Key Values

 

 

TABLE ACCESS BY LOCAL INDEX ROWID TABLE IPS2.TIPS_TRD_HK_P Cost: 1,810 Bytes: 564,799 Cardinality: 197Partition #: 1 Partitions determined by Key Values

 

 

 

BITMAP CONVERSION TO ROWIDS

 

 

 

 

BITMAP AND

 

 

 

 

 

BITMAP CONVERSION FROM ROWIDS

 

 

 

 

 

 

INDEX RANGE SCAN INDEX IPS2.IDX_HK_P_MER_CODE Cost: 13 Cardinality: 1,574 Partition #: 1 Partitions determined by Key Values

 

 

 

 

 

BITMAP CONVERSION FROM ROWIDS

 

 

 

 

 

 

SORT ORDER BY

 

 

 

 

 

 

 

INDEX RANGE SCAN INDEX IPS2.IDX_HK_P_CT_HB_ID Cost: 1,684 Cardinality: 1,574 Partition #: 1 Partitions determined by Key Values

220ms

 

create index idx_hk_p_mer_code_b ON TIPS_TRD_HK_P(MER_CODE) ;

select  from ips2.TIPS_TRD_HK_P where HB_CREATETIME>SYSDATE-1900 AND MER_CODE='010870'

Plan

SELECT STATEMENT ALL_ROWS Cost: 1,894 Bytes: 564,799 Cardinality: 197

 

TABLE ACCESS BY GLOBAL INDEX ROWID TABLE IPS2.TIPS_TRD_HK_P Cost: 1,894 Bytes: 564,799 Cardinality: 197Partition #: 1 Partition access computed by row location

 

 

INDEX RANGE SCAN INDEX IPS2.IDX_HK_P_MER_CODE_B Cost: 8 Cardinality: 1,574

87ms

 

通过以上比较,全局普通索引比本地非前缀索引要快一些!

 

9.删除分区使用UPDATE GLOBAL INDEXES

 

SELECT INDEX_NAME,TABLE_NAME,STATUS,PARTITIONED FROM DBA_INDEXES WHERE OWNER='IPS2' ANDTABLE_NAME='TIPS_TRD_HK_P'

INDEX_NAME

TABLE_NAME

STATUS

PARTITIONED

IDX_HK_P_HB_ID_CT

TIPS_TRD_HK_P

N/A

YES

IDX_HK_P_CT_HB_ID

TIPS_TRD_HK_P

N/A

YES

IDX_HK_P_HB_SDATE

TIPS_TRD_HK_P

VALID

NO

IDX_HK_P_HB_EDATE

TIPS_TRD_HK_P

VALID

NO

IDX_HK_P_AMT

TIPS_TRD_HK_P

N/A

YES

 

ALTER TABLE IPS2.TIPS_TRD_HK_P DROP PARTITION TRD_HK_2009 UPDATE GLOBAL INDEXES;

 

SELECT INDEX_NAME,TABLE_NAME,STATUS,PARTITIONED FROM DBA_INDEXES WHERE OWNER='IPS2' ANDTABLE_NAME='TIPS_TRD_HK_P'

INDEX_NAME

TABLE_NAME

STATUS

PARTITIONED

IDX_HK_P_HB_ID_CT

TIPS_TRD_HK_P

N/A

YES

IDX_HK_P_CT_HB_ID

TIPS_TRD_HK_P

N/A

YES

IDX_HK_P_HB_SDATE

TIPS_TRD_HK_P

VALID

NO

IDX_HK_P_HB_EDATE

TIPS_TRD_HK_P

VALID

NO

IDX_HK_P_AMT

TIPS_TRD_HK_P

N/A

YES

 

通过查询以下SQL:

select from TIPS_TRD_HK_P where  hb_createtime>sysdate-40  

select from TIPS_TRD_HK_P where  hb_createtime>sysdate-640

 

select from TIPS_TRD_HK_P where   HB_ID>80

select from TIPS_TRD_HK_P where   HB_ID>8000

select   from TIPS_TRD_HK_P where   HB_ID>8000

 

select from TIPS_TRD_HK_P where  hb_createtime>sysdate-40 and  HB_ID>8000

select from TIPS_TRD_HK_P where  HB_ID>8000 and hb_createtime>sysdate-40

 

select from TIPS_TRD_HK_P where  hb_createtime>sysdate-640 and  HB_ID>8000

select from TIPS_TRD_HK_P where  HB_ID>8000 and hb_createtime>sysdate-640

本地index没有变更,无需维护 。

 

 

 

10.删除/拆分索引分区:

无法显式的删除本地索引的分区,删除的唯一方式是本地索引分区基表的分区被删除时由Oracle自动的隐式删除。

 

如果全局索引分区是空的,则可以显式的删除它,使用的语句是ALTER INDEX index_name DROP PARTITION partition_name。但是,如果全局索引分区包含数据,删除则会引起更高级的分区(即下一个分区)变得不可用。如果非要这么做,则对更高级的分区需要重构,语法是:

 ALTER INDEX index_name REUBILT PARTITION nextpartition_name

 

本地索引分区无法显式的拆分,其拆分的唯一途径是基表的分区拆分时由Oracle隐式的进行拆分。全局索引分区可以拆分,拆分完成后需要重构。

 

CREATE INDEX IDX_HK_P_AMT ON IPS2.TIPS_TRD_HK_P(HB_AMT)

GLOBAL PARTITION BY RANGE(HB_AMT)

(PARTITION  IDX_HK_P_AMT_P1 VALUES LESS THAN (2000),

 PARTITION  IDX_HK_P_AMT_P2 VALUES LESS THAN (10000),

 PARTITION  IDX_HK_P_AMT_P3 VALUES LESS THAN (50000),

 PARTITION  IDX_HK_P_AMT_P4 VALUES LESS THAN (200000),

 PARTITION  IDX_HK_P_AMT_P5 VALUES LESS THAN (MAXVALUE)

);

 

 

SELECT INDEX_NAME,TABLE_NAME,STATUS,PARTITIONED FROM DBA_INDEXES WHERE OWNER='IPS2' ANDTABLE_NAME='TIPS_TRD_HK_P';

 

SELECT INDEX_NAME,PARTITION_NAME,STATUS FROM DBA_IND_PARTITIONS  WHERE INDEX_OWNER='IPS2'  ANDINDEX_NAME='IDX_HK_P_AMT'

ORDER BY INDEX_NAME,PARTITION_NAME;

INDEX_NAME

PARTITION_NAME

STATUS

IDX_HK_P_AMT

IDX_HK_P_AMT_P1

USABLE

IDX_HK_P_AMT

IDX_HK_P_AMT_P2

USABLE

IDX_HK_P_AMT

IDX_HK_P_AMT_P3

USABLE

IDX_HK_P_AMT

IDX_HK_P_AMT_P4

USABLE

IDX_HK_P_AMT

IDX_HK_P_AMT_P5

USABLE

 

 

ALTER INDEX IDX_HK_P_AMT DROP PARTITION IDX_HK_P_AMT_P1;

 

SELECT INDEX_NAME,TABLE_NAME,STATUS,PARTITIONED FROM DBA_INDEXES WHERE OWNER='IPS2' ANDTABLE_NAME='TIPS_TRD_HK_P';

 

SELECT INDEX_NAME,PARTITION_NAME,STATUS FROM DBA_IND_PARTITIONS  WHERE INDEX_OWNER='IPS2'  ANDINDEX_NAME='IDX_HK_P_AMT'

ORDER BY INDEX_NAME,PARTITION_NAME;

INDEX_NAME

PARTITION_NAME

STATUS

IDX_HK_P_AMT

IDX_HK_P_AMT_P2

UNUSABLE

IDX_HK_P_AMT

IDX_HK_P_AMT_P3

USABLE

IDX_HK_P_AMT

IDX_HK_P_AMT_P4

USABLE

IDX_HK_P_AMT

IDX_HK_P_AMT_P5

USABLE

 

ALTER INDEX IDX_HK_P_AMT REBUILD PARTITION IDX_HK_P_AMT_P2;

 

SELECT INDEX_NAME,TABLE_NAME,STATUS,PARTITIONED FROM DBA_INDEXES WHERE OWNER='IPS2' ANDTABLE_NAME='TIPS_TRD_HK_P';

 

SELECT INDEX_NAME,PARTITION_NAME,STATUS FROM DBA_IND_PARTITIONS  WHERE INDEX_OWNER='IPS2'  ANDINDEX_NAME='IDX_HK_P_AMT'

 

INDEX_NAME

PARTITION_NAME

STATUS

IDX_HK_P_AMT

IDX_HK_P_AMT_P2

USABLE

IDX_HK_P_AMT

IDX_HK_P_AMT_P3

USABLE

IDX_HK_P_AMT

IDX_HK_P_AMT_P4

USABLE

IDX_HK_P_AMT

IDX_HK_P_AMT_P5

USABLE

 

 

 

ALTER INDEX IDX_HK_P_AMT SPLIT

PARTITION IDX_HK_P_AMT_P2 AT(2000) INTO (PARTITION IDX_HK_P_AMT_P1, PARTITIONIDX_HK_P_AMT_P2);

 

 

SELECT INDEX_NAME,TABLE_NAME,STATUS,PARTITIONED FROM DBA_INDEXES WHERE OWNER='IPS2' ANDTABLE_NAME='TIPS_TRD_HK_P';

 

SELECT INDEX_NAME,PARTITION_NAME,STATUS FROM DBA_IND_PARTITIONS  WHERE INDEX_OWNER='IPS2'  ANDINDEX_NAME='IDX_HK_P_AMT'

ORDER BY INDEX_NAME,PARTITION_NAME;

INDEX_NAME

PARTITION_NAME

STATUS

IDX_HK_P_AMT

IDX_HK_P_AMT_P1

USABLE

IDX_HK_P_AMT

IDX_HK_P_AMT_P2

USABLE

IDX_HK_P_AMT

IDX_HK_P_AMT_P3

USABLE

IDX_HK_P_AMT

IDX_HK_P_AMT_P4

USABLE

IDX_HK_P_AMT

IDX_HK_P_AMT_P5

USABLE

 

从以上可知,拆分后可能不需要重建涉及的索引分区:

ALTER INDEX IDX_HK_P_AMT REBUILD PARTITION IDX_HK_P_AMT_P1;

ALTER INDEX IDX_HK_P_AMT REBUILD PARTITION IDX_HK_P_AMT_P2;

<!-- 正文结束 -->

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

上一篇: 没有了~
下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2010-01-28