oracle重建索引的实现

数据库 Oracle
oracle重建索引有很多种方式,下文讲讲为您详细介绍几种方式异同以及优缺点,如果您对此方面感兴趣的话,不妨一看。

oracle重建索引是我们经常会用到的操作,下面就将为您详细介绍oracle重建索引的实现方法,希望对您能够有所帮助。

oracle重建索引有多种方式,如drop and re-create、rebuild、rebuild online等。下面简单比较这几种方式异同以及优缺点:

首先建立测试表及数据:

  1. SQL> CREATE TABLE TEST AS SELECT CITYCODE C1 FROM CITIZENINFO2;  
  2.  
  3. Table created  
  4.  
  5. SQL> ALTER TABLE TEST MODIFY C1 NOT NULL;  
  6.  
  7. Table altered  
  8.  
  9. SQL> SELECT COUNT(1) FROM TEST;  
  10.  
  11. COUNT(1)  
  12. ----------  
  13. 16000000  
  14.  

一、drop and re-create和rebuild

首先看看正常建立索引时,对表的加锁情况。

  1. suk@ORACLE9I> @show_sid  
  2.  
  3. SID  
  4. ----------  
  5. 14  
  6.  
  7. suk@ORACLE9I> CREATE INDEX IDX_TEST_C1 ON TEST(C1);  

索引已创建。

  1. SQL> SELECT OBJECT_NAME,LMODE FROM V$LOCK L,DBA_OBJECTS O WHERE O.OBJECT_ID=L.ID1 AND L.TYPE='TM' AND SID=14;  
  2.  
  3. OBJECT_NAME LMODE  
  4. ------------------------------ ----------  
  5. OBJ$ 3  
  6. TEST 4  

可见,普通情况下建立索引时,oracle会对基表加share锁,由于share锁和 row-X是不兼容的,也就是说,在建立索引期间,无法对基表进行DML操作。

对于删除重建索引的方法就不介绍了,它与上面的描述是一样的,下面我们看看用rebuild的方式建立索引有什么特别。

  1. suk@ORACLE9I> ALTER INDEX IDX_TEST_C1 REBUILD; 

索引已更改。

另开一个会话,查询此时test的加锁情况:

  1. SQL> SELECT OBJECT_NAME,LMODE FROM V$LOCK L,DBA_OBJECTS O WHERE O.OBJECT_ID=L.ID1 AND L.TYPE='TM' AND SID=14;  
  2.  
  3. OBJECT_NAME LMODE  
  4. ------------------------------ ----------  
  5. TEST 4  

可见,rebuild的方式对基表的加锁方式与CREATE时是一样的。

另开一个会话,在索引正在rebuild时,执行如下SQL:

  1. suk@ORACLE9I> SET AUTOTRACE TRACE  
  2. suk@ORACLE9I> SELECT /*+ INDEX(TEST) */ COUNT(1) FROM TEST WHERE ROWNUM<10

执行计划

  1. ----------------------------------------------------------  
  2. SELECT STATEMENT Optimizer=CHOOSE (Cost=26 Card=1)  
  3. 0 SORT (AGGREGATE)  
  4. 1 COUNT (STOPKEY)  
  5. 2 INDEX (FULL SCAN) OF 'IDX_TEST_C1' (NON-UNIQUE) (Cost=  
  6. 26 Card=1986621

可以看到oracle重建索引时,查询仍然可以使用旧索引。实际上,oracle在rebuild时,在创建新索引过程中,并不会删除旧索引,直到新索引rebuild成功。

从这点可以知道rebuild比删除重建的一个好处是不会影响原有的SQL查询,但也正由于此,用rebuild方式建立索引需要相应表空间的空闲空间是删除重建方式的2倍。
 

 

 

【编辑推荐】

利用替换变量提高Oracle交互性

ORACLE系统表和数据字典视图

带您了解Oracle文件系统机制

详解四大类Oracle索引扫描

Oracle查询重复记录的三种方法

 

责任编辑:段燃 来源: 互联网
相关推荐

2010-11-16 09:49:22

Oracle重建索引

2009-10-21 16:34:03

Oracle用户名重建索引

2009-08-05 13:32:07

Oracle按用户名重

2019-08-20 22:06:32

Oracle数据库索引

2011-07-27 13:22:35

检查索引碎片Oracle数据库重建索引

2011-05-26 10:11:24

Oracle数据库索引

2010-10-29 13:50:21

oracle日志文件

2011-07-04 10:19:41

索引ONLINE

2018-01-18 16:10:42

数据库MySQLOracle

2010-10-26 17:34:03

Oracle索引

2024-03-26 09:29:27

MySQLDDL

2015-09-02 13:38:38

Windows 10搜索索引

2010-04-19 16:09:22

Oracle控制文件

2009-10-22 16:25:53

Oracle UNDO

2010-10-26 16:33:54

创建Oracle索引

2010-10-27 13:47:50

Oracle索引

2010-10-26 17:17:37

创建ORACLE索引

2010-07-26 09:34:24

SQL Server性

2011-05-20 11:33:06

ORACLE索引约束

2011-08-10 15:11:23

SQL Server整理索引碎片重建索引
点赞
收藏

51CTO技术栈公众号