首页 > 数据库 > Oracle > ORACLE基础学习-索引部分
create table TT(id number,createdate date)
partition by range(createdate)
(
partition Q1 VALUES LESS THAN (TO_DATE('2012-03-30','YYYY-MM-DD')),
partition Q2 VALUES LESS THAN (TO_DATE('2012-06-30','YYYY-MM-DD')),
partition Q3 VALUES LESS THAN (TO_DATE('2012-09-30','YYYY-MM-DD')),
partition Q4 VALUES LESS THAN (TO_DATE('2012-12-31','YYYY-MM-DD')),
partition Q_OTHERS VALUES LESS THAN (MAXVALUE)
);
INDEX_NAME PARTITION_NAME HIGH_VALUE STATUS
------------------------------ ------------------------------ -------------------- --------
INDEX_TT1_LOCAL P1 TO_DATE(' 2012-03-30 USABLE
00:00:00', 'SYYYY-M
M-DD HH24:MI:SS', 'N
LS_CALENDAR=GREGORIA
INDEX_TT1_LOCAL P2 TO_DATE(' 2012-06-30 USABLE
00:00:00', 'SYYYY-M
M-DD HH24:MI:SS', 'N
LS_CALENDAR=GREGORIA
INDEX_TT1_LOCAL P3 TO_DATE(' 2012-09-30 USABLE
INDEX_NAME PARTITION_NAME HIGH_VALUE STATUS
------------------------------ ------------------------------ -------------------- --------
00:00:00', 'SYYYY-M
M-DD HH24:MI:SS', 'N
LS_CALENDAR=GREGORIA
INDEX_TT1_LOCAL P4 TO_DATE(' 2012-12-31 USABLE
00:00:00', 'SYYYY-M
M-DD HH24:MI:SS', 'N
LS_CALENDAR=GREGORIA
INDEX_TT1_LOCAL P5 MAXVALUE USABLE
第二种情况:
如果查询的语句条件只有一个createdate,如where createdate='2010-10-19',则这种情况就在createdate上建立一个local profiex索引
SQL> create index index_TT2_local on TT(createdate) local;
Index created.
SQL> select INDEX_NAME,PARTITION_NAME,HIGH_VALUE,STATUS from dba_ind_partitions where index_name='INDEX_TT2_LOCAL';
INDEX_NAME PARTITION_NAME HIGH_VALUE STATUS
------------------------------ ------------------------------ -------------------- --------
INDEX_TT2_LOCAL Q1 TO_DATE(' 2012-03-30 USABLE
00:00:00', 'SYYYY-M
M-DD HH24:MI:SS', 'N
LS_CALENDAR=GREGORIA
INDEX_TT2_LOCAL Q2 TO_DATE(' 2012-06-30 USABLE
00:00:00', 'SYYYY-M
M-DD HH24:MI:SS', 'N
LS_CALENDAR=GREGORIA
INDEX_TT2_LOCAL Q3 TO_DATE(' 2012-09-30 USABLE
INDEX_NAME PARTITION_NAME HIGH_VALUE STATUS
------------------------------ ------------------------------ -------------------- --------
00:00:00', 'SYYYY-M
M-DD HH24:MI:SS', 'N
LS_CALENDAR=GREGORIA
INDEX_TT2_LOCAL Q4 TO_DATE(' 2012-12-31 USABLE
00:00:00', 'SYYYY-M
M-DD HH24:MI:SS', 'N
LS_CALENDAR=GREGORIA
INDEX_TT2_LOCAL Q_OTHERS MAXVALUE USABLE
从上面查询可以看出他和表是equi-partitioned.
第三种情况:
如果查询根本就没有createdate,而是有像where id>100的条件,则就只能在ID列上建立GLOBAL索引了
create index index_tt3_global on TT(id)
global partition by range(id)
(
partition p1 values less than (100000),
partition p2 values less than (200000),
partition p3 values less than (MAXVALUE)
);
从上面可以看出,GLOBAL的索引的分区数和其基本是没有关系的。他甚至可以想下面一个建立索引,即一个普通索引。但是LOCAL的必须和其基本分区数一致。
SQL> create index index_tt3_global on TT(id) global;
Index created.
总之,一般建议建立LOCAL的索引,因为GLOBAL的容易所有的都失效,而LOCAL的最多只在某个分区上失效。索引失效必须一个分区的一个分区的REBUILD。
Table altered.
十五 、位图连接索引
(空)
十六、快速重建索引 : 使用rebuild选项,可以使用已有索引而不是整个表快速重建索引。
alter index cust_idx1 rebuild paralleltablespace cust_tblspc storage (pctincrease 0);还可以使用storage子句和parallel子句。
十七、在线重建索引
可以在执行DML时创建或重建索引。DML少时重建更好些。11g之前在线重建需要排他锁,会导致DML延迟造成性能波动。现在快多了,比drop后create要快。
create index index_name on table(col1,col2)online;
alter index index_name rebuild online;
但不能对位图索引rebuild online;对强制完整性约束的索引也不能rebuildonline;???测试不会报错,估计是会阻塞dml才不让rebuild online;
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/119872/viewspace-1251745/ ,如需转载,请注明出处,否则将追究法律责任。