Oracle虚拟索引
发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,从9.2版本开始Oracle引入了虚拟索引的概念,虚拟索引是一个"伪造"的索引,它的定义只存在数据字典中并有存在相关的索引段。虚拟索引是为了在不真正创建索引的情况下,验证如果使用索引sql执行计划是否
千家信息网最后更新 2025年02月02日Oracle虚拟索引
从9.2版本开始Oracle引入了虚拟索引的概念,虚拟索引是一个"伪造"的索引,它的定义只存在数据字典中并有存在相关的索引段。虚拟索引是为了在不真正创建索引的情况下,验证如果使用索引sql执行计划是否改变,执行效率是否能得到提高。
本文在11.2.0.4版本中测试使用虚拟索引
1、创建测试表
ZX@orcl> create table test_t as select * from dba_objects;Table created.ZX@orcl> select count(*) from test_t; COUNT(*)---------- 86369
2、查看一个SQL的执行计划,由于没有创建索引,使用TABLE ACCESS FULL访问表
ZX@orcl> set autotrace traceonly explainZX@orcl> select object_name from test_t where object_id=123;Execution Plan----------------------------------------------------------Plan hash value: 2946757696----------------------------------------------------------------------------| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |----------------------------------------------------------------------------| 0 | SELECT STATEMENT | | 14 | 1106 | 344 (1)| 00:00:05 ||* 1 | TABLE ACCESS FULL| TEST_T | 14 | 1106 | 344 (1)| 00:00:05 |----------------------------------------------------------------------------Predicate Information (identified by operation id):--------------------------------------------------- 1 - filter("OBJECT_ID"=123)Note----- - dynamic sampling used for this statement (level=2)
3、创建虚拟索引,数据字典中有这个索引的定义但是并没有实际创建这个索引段
ZX@orcl> set autotrace offZX@orcl> create index idx_virtual on test_t (object_id) nosegment;Index created.ZX@orcl> select object_name,object_type from user_objects where object_name='IDX_VIRTUAL';OBJECT_NAME OBJECT_TYPE-------------------------------------------------------------------------------------------------------------------------------- -------------------IDX_VIRTUAL INDEXZX@orcl> select segment_name,tablespace_name from user_segments where segment_name='IDX_VIRTUAL';no rows selected
4、再次查看执行计划
ZX@orcl> set autotrace traceonly explainZX@orcl> select object_name from test_t where object_id=123;Execution Plan----------------------------------------------------------Plan hash value: 2946757696----------------------------------------------------------------------------| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |----------------------------------------------------------------------------| 0 | SELECT STATEMENT | | 14 | 1106 | 344 (1)| 00:00:05 ||* 1 | TABLE ACCESS FULL| TEST_T | 14 | 1106 | 344 (1)| 00:00:05 |----------------------------------------------------------------------------
5、我们看到执行计划并没有使用上面创建的索引,要使用虚拟索引需要设置参数
ZX@orcl> alter session set "_use_nosegment_indexes"=true;Session altered.
6、再次查看执行计划,可以看到执行计划选择了虚拟索引,而且时间也缩短了。
ZX@orcl> select object_name from test_t where object_id=123;Execution Plan----------------------------------------------------------Plan hash value: 1533029720-------------------------------------------------------------------------------------------| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |-------------------------------------------------------------------------------------------| 0 | SELECT STATEMENT | | 14 | 1106 | 5 (0)| 00:00:01 || 1 | TABLE ACCESS BY INDEX ROWID| TEST_T | 14 | 1106 | 5 (0)| 00:00:01 ||* 2 | INDEX RANGE SCAN | IDX_VIRTUAL | 315 | | 1 (0)| 00:00:01 |-------------------------------------------------------------------------------------------Predicate Information (identified by operation id):--------------------------------------------------- 2 - access("OBJECT_ID"=123)Note----- - dynamic sampling used for this statement (level=2)
从上面的执行计划可以看出创建这个索引会起到优化的效果,这个功能在大表建联合索引优化能起到很好的做作用,可以测试多个列组合哪个组合效果最好,而不需要实际每个组合都创建一个大索引。
7、删除虚拟索引
ZX@orcl> drop index idx_virtual;Index dropped.
MOS文档:Virtual Indexes (文档 ID 1401046.1)
索引
测试
组合
再次
字典
实际
效果
数据
文档
版本
作用
功能
参数
多个
并有
情况
效率
时间
最好
概念
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
武汉计算机软件开发流程
想学软件开发哪个学校比较好
数据库中tiny
重庆服务器报废哪家服务好
玉米数据库
网络安全法第三次审议时间
软件开发课程设计论文
医院软件开发价格
关于网络安全教育的必要性
国内服务器维护费用
网络安全对各方面的影响
圣光服务器
网络安全健康及环境的责任
设某数据库有学生表和选课表
招远数据库恢复
网络安全维护都是哪些方面
郴州市计算机软件开发学校
网络安全执法检查自查表
im服务器地址
服务器配置与管理教学
qt遍历服务器文件
电脑网络技术有限公司
怎么把记事本的数据库
南京爱立信软件开发面试题
陕西服务器阵列卡报价
_数据库
数据库和c 结合使用方法
网络安全答题竞赛题库
数据库实验结果及分析怎么写
服务器怎么虚拟机多开