前几天遇到一个问题,重建一个表的索引的时候,竟然用了8个多小时。后来仔细检查了一下创建慢的索引,发现基本都是全局索引而且都是 ONLINE方式重建,每个分区的重建时间基本相同,大约在23分钟左右。其实导致问题的原因很简单:由于采用ONLINE方式,而且全局索引的每一个分区的数据可能来自这个表的任何一个分区,所以ORACLE对于全局索引的任何一个分区的重建都要走全表扫描。
SQL> SHOW USER
USER is "TEST"
SQL> CREATE TABLE T(ID INT,NAME VARCHAR2(30))
2 PARTITION BY RANGE(ID)
3 (
4 PARTITION P1 VALUES LESS THAN(10000),
5 PARTITION P2 VALUES LESS THAN(20000),
6 PARTITION P3 VALUES LESS THAN(30000),
7 PARTITION P4 VALUES LESS THAN(40000),
8 PARTITION P5 VALUES LESS THAN(50000),
9 PARTITION PMAX VALUES LESS THAN(MAXVALUE)
10 )
11 /
Table created.
SQL> CREATE INDEX T_ID_IDX ON T(ID) GLOBAL
2 PARTITION BY HASH(ID)
3 PARTITIONS 32
4 /
Index created.
SQL> COL INDEX_NAME FORMAT A20
SQL> COL PARTITION_NAME FORMAT A20
SQL> SELECT INDEX_NAME,PARTITION_NAME FROM USER_IND_PARTITIONS WHERE INDEX_NAME='T_ID_IDX';
INDEX_NAME PARTITION_NAME
-------------------- --------------------
T_ID_IDX SYS_P225
T_ID_IDX SYS_P226
T_ID_IDX SYS_P227
T_ID_IDX SYS_P228
T_ID_IDX SYS_P229
T_ID_IDX SYS_P230
T_ID_IDX SYS_P231
T_ID_IDX SYS_P232
T_ID_IDX SYS_P233
| 广告合作:400-664-0084 全国热线:400-664-0084 Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15066211号 珠峰网 版权所有 All Rights Reserved
|