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

Oracle、MySQL资料及经验

.

 
 
 

日志

 
 

虚拟索引  

2013-12-22 21:59:58|  分类: 新特性 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |


--以下内容主要来源于梁敬彬老师的sql优化课

/* 
  结论:在数据库优化中,索引的重要性不言而喻。但是,在性能调整过程中,一个索引是否能被查询用到,在索
引创建之前是无法确定的,而创建索引是一个代价比较高的操作,尤其是数据量较大的时候。这时你就应该考虑使用虚拟索引来做个试验
*/

 

drop table t purge;
create table t as select * from dba_objects;
--创建虚拟索引,首先要将_use_nosegment_indexes的隐含参数设置为true
alter session set "_use_nosegment_indexes"=true;
--虚拟索引的创建语法比较简单,实际上就是普通索引语法后面加一个nosegment关键字
create index ix_t_id on t(object_id) nosegment;
set linesize 300
select * from table(dbms_xplan.display());
set autotrace traceonly
select * from t where object_id=1;
set autotrace off
--以下看的是真实执行计划,显然是用不到索引。
alter session set statistics_level=all;
select * from t where object_id=1;
select * from table(dbms_xplan.display_cursor(null,null,'allstats last'));
--从数据字段中是无法找到这个索引的。
select index_name,status from user_indexes where table_name='T';


--删除虚拟索引
drop index ix_t_id;

 

 

注:虚拟索引的几个特点
1. 无法执行alter index
2. 不能创建和虚拟索引同名的实际索引
3. 可以创建和虚拟索引包含相同列但不同名的实际索引
4. 在10g使用回收站特性的时候,虚拟索引必须显式drop,或者在drop table后purge table后,才能创建同名的索引
5. 虚拟索引分析并且有效,但是数据字典里查不到结果,估计是oracle内部临时保存了分析结果

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

历史上的今天

在LOFTER的更多文章

评论

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

页脚

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