暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 创建虚拟索引需注意的事项

原创 尚雷 2022-12-27
833

一、前言

从9.2版本开始Oracle引入了虚拟索引的概念,虚拟索引是一个“伪造”的索引,它的定义只存在数据字典中并有存在相关的索引段。虚拟索引是为了在不真正创建索引的情况下,验证如果使用索引sql执行计划是否改变,执行效率是否能得到提高。

二、知识点

2.1、虚拟索引支持类型

虚拟索引支持B-TREE索引和BIT位图索引,在CBO模式下ORACLE优化器会考虑虚拟索引,但是在RBO模式下需要添加hint才行。

2.2、虚拟索引创建语法

--使用虚拟索引需要设置隐含参数
alter session set "_use_nosegment_indexes"=true;

2.3、虚拟索引删除

drop index virtual_XXX_index_name;

三、测试

有时为了性能优化需要,测试下创建索引对性能的改善,想通过测试虚拟索引来验证下使用索引是否带来性能改善,但创建虚拟索引也会对当前数据库产生影响,严重会导致锁表甚至引起数据库hang。

为了测试虚拟索引对数据库的影响,接下来在测试环境进行了模拟测试。

打开一个session,模拟DML操作,修改一个字段数值,不提交
image.png

然后另开一个session,来模拟创建虚拟索引
alter session set “_use_nosegment_indexes”=true;
image.png
会提示ORA-00054: resource busy报错,无法在待修改字段上创建索引。

接下来再测试在该表其它字段上能否正常创建虚拟索引
image.png
发现也是同样报错

接下来尝试在nosegment 后添加 online
image.png
提示ORA-02158: invalid CREATE INDEX option

所以:勿轻易在生产时段,尤其是业务比较繁忙的表创建虚拟索引。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论