Chinaunix首页 | 论坛 | 博客
  • 博客访问: 663867
  • 博文数量: 163
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1625
  • 用 户 组: 普通用户
  • 注册时间: 2014-11-24 11:40
个人简介

资深Oracle数据库专家 OCM认证大师 10年数据库相关服务及开发经验 各类数据库相关方案的编写,管理及实施 数据中心数据库日常运维、大型项目割接、性能优化等方面有丰富的实战经验 客户包括: 电信,银行,保险,航空,国网,汽车,烟草等 想要一起学习探讨数据安全技术的请加qq群 256041954

文章分类

全部博文(163)

文章存档

2017年(2)

2016年(112)

2015年(38)

2014年(11)

我的朋友

分类: Oracle

2015-04-03 10:19:37

DBA在日常维护管理数据库进行低性能SQL分析时,有时候需要通过创建索引对SQL进行优化,但有些时候我们创建的索引是否能用到?这个只能创建以后才能看出效果,但是在实际工作中,特别是对大表创建索引对系统性能有很大影响,因此我们不得不避开业务高峰时段,但是有没有一种办法创建索引而不影响性能呢?有,虚拟索引。

虚拟索引不是物理存在的,它并不会创建实际的索引段,只是在数据字典中加了一个索引的记录,使得优化器能够意识到一个索引的存在,从而判断是否使用该索引作为访问路径。作用仅仅是为了DBA作SQL优化时使用,DBA跟据虚拟索引的优化效果决定是否创建物理索引。
一、虚拟索引支持类型
虚拟索引支持B-TREE索引和BIT位图索引,在CBO模式下ORACLE优化器会考虑虚拟索引,但是在RBO模式下需要添加hint才行,在10g以后使用RBO模式方法
alter session set optimizer_mode=rule;
二、虚拟索引创建语法
create index idx_wxw on t(object_id) nosegment;
alter session set '_use_nosegment_indexes'=true;
注意,创建虚拟索引后需要设置隐含参数'_use_nosegment_indexes'为true ORACLE才会选择虚拟索引
三、虚拟索引特点
1.虚拟索引无法执行alter index选项
SQL> alter index idx_wxw rebuild
ERROR at line 1:
ORA-08114: can not alter a fake index
2. 使用回收站特性的时候,虚拟索引必须显式drop,才能创建同名的索引
SQL> create index idx_wxw on test(name)
ERROR at line 1:
ORA-00955: name is already used by an existing object
3. 不能创建和虚拟索引同名的实际索引
4. 可以创建和虚拟索引包含相同列但不同名的实际索引
5. 使用回收站特性的时候,虚拟索引必须显式drop,或者在drop table后purge table后,才能创建同名的索引
6. 虚拟索引分析并且有效,但是数据字典里查不到结果,估计是oracle内部临时保存了分析结果
阅读(1904) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~