Oracle虚拟索引
发表于:2025-11-14 作者:千家信息网编辑
千家信息网最后更新 2025年11月14日,从9.2版本开始Oracle引入了虚拟索引的概念,虚拟索引是一个"伪造"的索引,它的定义只存在数据字典中并有存在相关的索引段。虚拟索引是为了在不真正创建索引的情况下,验证如果使用索引sql执行计划是否
千家信息网最后更新 2025年11月14日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安全错误
数据库的锁怎样保障安全
华为云服务器登录了什么
串口怎么连服务器
数据库中怎么分组
网络安全风险由什么导致的
上海博科软件开发
金融 数据库 mysql
监控服务器有两个网口
烟圈视频软件开发
windows服务器监控工...
校内服务器
软件开发c# vc
数据库中建立一个学生表
网络安全保险哪家在做
服务器内存质量检测报告
冰雪传奇服务器人数
php数据库安全总结
ipv9中国根服务器是谁提供的
妇联网络安全宣传系列活动
颐腾网络技术有限公司
德宸网络技术有限公司
网络安全的防护技术
java软件开发转安全
工业控制系统网络安全服务
聚焦网络安全共享网络文明
数据库他靠
怎么判断自己的硬盘是服务器里的
嘉兴大梨网络技术
数据库如何插入照片字段
张家口软件开发网上价格
建湖软件开发者在线咨询