当前位置:首页 >时尚 >oracle重建索引的实现 希望对您能够有所帮助

oracle重建索引的实现 希望对您能够有所帮助

2024-07-01 07:07:52 [百科] 来源:避面尹邢网

oracle重建索引的重建实现

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

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

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

oracle重建索引的实现 希望对您能够有所帮助

首先建立测试表及数据:

oracle重建索引的实现 希望对您能够有所帮助

  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

oracle重建索引的实现 希望对您能够有所帮助

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

  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查询重复记录的三种方法

 

责任编辑:段燃 来源: 互联网 oracle重建索引

(责任编辑:时尚)

    推荐文章
    热点阅读