首页 > 数据库 > 数据库开发技术 > Oracle 创建虚拟索引需注意的事项
从9.2版本开始Oracle引入了虚拟索引的概念,虚拟索引是一个“伪造”的索引,它的定义只存在数据字典中并有存在相关的索引段。虚拟索引是为了在不真正创建索引的情况下,验证如果使用索引sql执行计划是否改变,执行效率是否能得到提高。
虚拟索引支持B-TREE索引和BIT位图索引,在CBO模式下ORACLE优化器会考虑虚拟索引,但是在RBO模式下需要添加hint才行。
--使用虚拟索引需要设置隐含参数
alter session set "_use_nosegment_indexes"=true;
drop index virtual_XXX_index_name;
有时为了性能优化需要,测试下创建索引对性能的改善,想通过测试虚拟索引来验证下使用索引是否带来性能改善,但创建虚拟索引也会对当前数据库产生影响,严重会导致锁表甚至引起数据库hang。
为了测试虚拟索引对数据库的影响,接下来在测试环境进行了模拟测试。
打开一个session,模拟DML操作,修改一个字段数值,不提交
然后另开一个session,来模拟创建虚拟索引
alter session set “_use_nosegment_indexes”=true;
会提示ORA-00054: resource busy报错,无法在待修改字段上创建索引。
接下来再测试在该表其它字段上能否正常创建虚拟索引
发现也是同样报错
接下来尝试在nosegment 后添加 online
提示ORA-02158: invalid CREATE INDEX option
所以:勿轻易在生产时段,尤其是业务比较繁忙的表创建虚拟索引。
原文作者:尚雷的驿站;如有侵权,请联系管理员删除。