一、目的与应用场景 虚拟索引的目的是模拟索引的存在而不用真实创建一个完整索引。这允许开发者创建虚拟索引来查看相关执行计划, 而不用等到真实创建完索引后才能查看索引对执行计划的影响。虚拟索引主要应用于SQL优化调优当中, 尤其是给数据库管理员(DBA)在生产环境进行SQL优化时使用。DBA可以根据虚拟索引的测试效果来判断是否需要创建实际索引。 二、创建与验证 创建虚拟索引: 语法:create index index_name on table_name(col_name) nosegment; 示例:create index idx_test_virtual on tt(object_id) nosegment; 注意:在创建虚拟索引时,需要在CREATE INDEX语句中指定nosegment子句。 验证虚拟索引: 创建虚拟索引后,需要设置隐含参数"_use_nosegment_indexes"为true,Oracle才会选择虚拟索引。 使用EXPLAIN PLAN或AUTOTRACE来查看执行计划,验证虚拟索引是否生效。 实例: SQL> create table tt as select * from dba_objects; Table created. SQL> create index idx_test_virtual on tt(object_id) nosegment; Index created. SQL> alter session set "_use_nosegment_indexes"=true; Session altered. SQL> set autotrace traceonly explain; SQL> select * from tt where object_id='100'; Execution Plan ---------------------------------------------------------- Plan hash value: 1614994782 -------------------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | -------------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 15 | 7215 | 5 (0)| 00:00:01 | | 1 | TABLE ACCESS BY INDEX ROWID BATCHED| TT | 15 | 7215 | 5 (0)| 00:00:01 | |* 2 | INDEX RANGE SCAN | IDX_TEST_VIRTUAL | 277 | | 1 (0)| 00:00:01 | -------------------------------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 2 - access("OBJECT_ID"=100) Note ----- - dynamic statistics used: dynamic sampling (level=2) 三、特点与限制 特点: 虚拟索引不会增加存储空间的使用。 虚拟索引支持B-TREE索引和BIT位图索引。 在CBO(Cost-Based Optimizer,基于代价的优化器)模式下,Oracle优化器会考虑虚拟索引; 但在RBO(Rule-Based Optimizer,基于规则的优化器)模式下,需要添加hint才行。 限制: 虚拟索引无法执行ALTER INDEX选项,如重建索引等。 使用回收站特性时,虚拟索引必须显式DROP,才能创建同名的索引。 不能创建和虚拟索引同名的实际索引。 虚拟索引分析有效,但数据字典里可能查不到结果,因为Oracle可能内部临时保存了分析结果。 四、使用场景示例 假设有一个性能较差的SQL语句,涉及几个数据量非常大的表。如果想尝试新增一个索引来优化性能, 但不确定优化器是否会使用该索引,或者使用该索引后执行计划是否能朝着预想的方向发展。 此时,可以在大表上创建一个虚拟索引来测试其效果,而无需承担创建和删除实际索引的高昂代价和潜在风险。 五、注意事项 虚拟索引并不是物理存在的,所以不要用自动跟踪去测试虚拟索引,因为那是实际执行的效果,用不到虚拟索引。 在生产环境中使用虚拟索引时,应谨慎操作,并确保不会对数据库中运行的其他查询的执行计划产生负面影响。 综上所述,Oracle虚拟索引是一种强大的工具,可以帮助DBA在SQL优化过程中更有效地评估索引的潜在影响。 然而,在使用时也需要了解其特点和限制,以确保正确和有效地利用这一功能。
oracle虚拟索引简介
来源:这里教程网
时间:2026-03-03 20:52:40
作者:
编辑推荐:
- oracle虚拟索引简介03-03
- 破解 ORA-14551:在 PL/SQL 中执行 DML 的陷阱与解决方案03-03
- [20241107]nocache的编译.txt03-03
- [20241108]跟踪library cache lock library cache pin使用gdb(11g)3.txt03-03
- [20241108]跟踪library cache lock library cache pin使用gdb(11g)4.txt03-03
- Oracle 统一审计- Best 实践四03-03
- Oracle SQL语句为什么不走索引-场景三03-03
- 数据库去O搞了个寂寞!甲骨文股价翻倍,市值突破5200亿美金!03-03
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- 破解 ORA-14551:在 PL/SQL 中执行 DML 的陷阱与解决方案
- Oracle 统一审计- Best 实践四
Oracle 统一审计- Best 实践四
26-03-03 - Oracle SQL语句为什么不走索引-场景三
Oracle SQL语句为什么不走索引-场景三
26-03-03 - 数据库去O搞了个寂寞!甲骨文股价翻倍,市值突破5200亿美金!
数据库去O搞了个寂寞!甲骨文股价翻倍,市值突破5200亿美金!
26-03-03 - Oracle 统一审计- Best 实践五
Oracle 统一审计- Best 实践五
26-03-03 - 查询DBA_FREE_SPACE缓慢问题
查询DBA_FREE_SPACE缓慢问题
26-03-03 - Oracle Linux 8.10 图形化安装 Oracle Database 21c
- 长沙岳麓区家具馆:邂逅高颜值餐桌,开启优雅用餐时光
长沙岳麓区家具馆:邂逅高颜值餐桌,开启优雅用餐时光
26-03-03 - 芯片行业ERP系统设计需要考虑哪些因素
芯片行业ERP系统设计需要考虑哪些因素
26-03-03 - 软件签名添加时间戳
软件签名添加时间戳
26-03-03
