注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Oracle、MySQL资料及经验

.

 
 
 

日志

 
 

把索引失效,加速DML操作  

2013-11-20 13:44:52|  分类: sql与pl/sql |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

对大表进行大量DML操作时,通过先把索引失效,然后索引重建,加快DML执行速度


如下t1表上有索引IDX_T1,当前执行计划:
SCOTT@orcl> select * from t1 where id=12;
Execution Plan
----------------------------------------------------------
Plan hash value: 50753647

--------------------------------------------------------------------------------------
| Id  | Operation                   | Name   | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |        |     1 |    57 |     2   (0)| 00:00:01 |
|   1 |  TABLE ACCESS BY INDEX ROWID| T1     |     1 |    57 |     2   (0)| 00:00:01 |
|*  2 |   INDEX RANGE SCAN          | IDX_T1 |     1 |       |     1   (0)| 00:00:01 |
--------------------------------------------------------------------------------------


把索引IDX_T1失效:
SCOTT@orcl> alter index idx_t1 unusable;
Index altered.


检查索引状态:
SCOTT@orcl> select index_name,status from user_indexes where index_name='IDX_T1';

INDEX_NAME                     STATUS
------------------------------ --------
IDX_T1                         UNUSABLE


索引失效后的执行计划:
SCOTT@orcl> select * from t1 where id=12;
Execution Plan
----------------------------------------------------------
Plan hash value: 3617692013

--------------------------------------------------------------------------
| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |      |     1 |    57 |     3   (0)| 00:00:01 |
|*  1 |  TABLE ACCESS FULL| T1   |     1 |    57 |     3   (0)| 00:00:01 |
--------------------------------------------------------------------------


索引失效后只能索引重建,不能enable:
SCOTT@orcl> alter index idx_t1 rebuild online;

Index altered.


SCOTT@orcl> select index_name,status from user_indexes where index_name='IDX_T1';

INDEX_NAME                     STATUS
------------------------------ --------
IDX_T1                         VALID

 

索引不能用disable和enable:
SCOTT@orcl> alter index idx_t1 disable;
alter index idx_t1 disable
*
ERROR at line 1:
ORA-02243: invalid ALTER INDEX or ALTER MATERIALIZED VIEW option

SCOTT@orcl> alter index idx_t1 enable;       
alter index idx_t1 enable
*
ERROR at line 1:
ORA-02243: invalid ALTER INDEX or ALTER MATERIALIZED VIEW option

  评论这张
 
阅读(176)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018