返回顶部
首页 > 资讯 > 数据库 >Oracle虚拟索引
  • 187
分享到

Oracle虚拟索引

2024-04-02 19:04:59 187人浏览 安东尼
摘要

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

从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 explain
ZX@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 off
ZX@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															 INDEX

ZX@orcl> select segment_name,tablespace_name from user_segments where segment_name='IDX_VIRTUAL';

no rows selected

4、再次查看执行计划

ZX@orcl> set autotrace traceonly explain
ZX@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)

您可能感兴趣的文档:

--结束END--

本文标题: Oracle虚拟索引

本文链接: https://lsjlt.com/news/44350.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Oracle虚拟索引
    从9.2版本开始Oracle引入了虚拟索引的概念,虚拟索引是一个“伪造”的索引,它的定义只存在数据字典中并有存在相关的索引段。虚拟索引是为了在不真正创建索引的情况下,验证如果使用索引sql执行计划是否改变,...
    99+
    2024-04-02
  • oracle性能调优-虚拟索引
    一、引言     DBA在日常维护管理数据库进行低性能SQL分析时,有时候需要通过创建索引对SQL进行优化,但有些时候我们创建的索引是否能用到?这个只能创建以...
    99+
    2024-04-02
  • Oracle中怎么实现虚拟索引
    Oracle中怎么实现虚拟索引,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1.创建一个测试表testSQL> create&...
    99+
    2024-04-02
  • oracle 19c虚拟要下自动索引测试
    1.关于测试 最近oracle举办了一系列线上分享,其中一个19c的新特性是自动索引。自己在docker中测试了一下,失败。 [oracle@8aa96a41b58b ~]$ sqlplus / as sy...
    99+
    2024-04-02
  • oracle索引监控-----未使用的索引
    oracle索引监控-----未使用的索引 oracle索引是用来优化DML处理速度,但是索引是会占用表空间,有时会占用比被索引表占用还要多的表空间。所以,索引监控未使用索引就显得很重...
    99+
    2024-04-02
  • 浅谈Oracle索引
    Oracle中查询走索引的情况: 对返回的行无任何限定条件,即没有where子句。 未对数据表与任何索引主列相对应的行限定条件。 例如:在id-name-time列创建了三列复合索引,那么仅对name列限定条件不能使用这个索...
    99+
    2014-07-01
    浅谈Oracle索引
  • Oracle索引扫描
    索引唯一扫描:是针对唯一性索引大扫描,它仅仅适用于where条件里是等值查询的目标SQL,因为扫描的对象是唯一性索引,只扫描索引高度这么多个索引块就停止了,索引的唯一扫描的结果至多只返回一条记录,...
    99+
    2024-04-02
  • Oracle中的索引
    索引是一种能够对数据记录进行物理排序,或逻辑排序的机制,对基于索引列的查询来说,其查询效率得到极大的提升。 索引是一个单独的、物理的数据结构,在这个数据结构中包括表中的一列或若干列的...
    99+
    2024-04-02
  • oracle 优化--索引
    一、事务1、简介事务是数据处理的核心,是业务上的一个逻辑单元,它能够保证其中对数据所有的操作,要么全部成功,要么全部失败。DBMS通过事务的管理来协调用户的并发行为,减少用户访问资源的冲突。 1)...
    99+
    2024-04-02
  • Oracle 11g R2 索引
    索引是oracle提供的一个对象,提供了一种快速访问数据的途径,提高了数据库的检索性能。索引使数据库程序无需对整个表进行全表扫描,就可以在其中找到所需要的数据,就想书的目录,可以通过他快速查找所需信息,无需...
    99+
    2024-04-02
  • oracle索引总结
    目录一、简介二、索引原理三、索引使用(创建、修改、删除、查看)1.创建索引语法2.修改索引3.重建索引3.删除索引4.查看索引四、索引分类1. B树索引2. 位图索引3.单列索引和复...
    99+
    2024-04-02
  • Oracle索引状态查询&索引重建
    --检查损坏索引 SELECT status, COUNT(*)   FROM dba_indexes  GROUP...
    99+
    2024-04-02
  • oracle怎么修改索引为唯一索引
    要将索引修改为唯一索引,可以使用Oracle的ALTER TABLE语句来完成。以下是修改索引为唯一索引的步骤:1. 查询当前的索引...
    99+
    2023-09-14
    oracle
  • 探索虚拟机的魔力:突破虚拟化界限
    打破硬件和软件的界限 传统虚拟化将操作系统和应用程序与底层硬件分离,允许它们在独立的虚拟机中运行。然而,现代虚拟化技术正在进一步发展,以打破这一界限。硬件辅助虚拟化 (HAV) 和半虚拟化等技术允许虚拟机直接访问物理硬件资源,例如处理器和...
    99+
    2024-04-02
  • Oracle索引和事务
    第四章索引和事务   什么是索引?有什么用? 1)索引是数据库对象之一,用于加快数据的检索,类似于书籍的目录。在数据库中索引可以减少数据库程序查询结果时需要读取的数据量,类似于在书籍中我们利用索引可以不用翻阅整本书即可找到想要的...
    99+
    2015-04-02
    Oracle索引和事务
  • Oracle系列:(25)索引
    什么是索引【Index】(1)是一种快速查询表中内容的机制,类似于新华字典的目录(2)运用在表中某个/些字段上,但存储时,独立于表之外为什么要用索引(1)通过指针加速Oracle服务器的查询速度(2)通过r...
    99+
    2024-04-02
  • oracle中重建索引
              数据库的索引如果有比较频繁的 Delete 操作, 将可能导致索...
    99+
    2024-04-02
  • 关于Oracle Text索引
    1.Oracle Text索引类型 索引类型 描述 支持的首选项与参数 查询运算符 注意事项 CONTEXT 当文本由大型,连贯的文档(例如,MS Word,HTML或纯文本)组成时,请使用此...
    99+
    2024-04-02
  • oracle btree索引概述
       今天研究下oracle的btree索引,通过这篇文章你会了解到,oracle btree索引都有哪几种类型、oracle btree索引的实现原理,oracle通过btree索...
    99+
    2024-04-02
  • oracle索引的使用
    这篇文章主要讲解了“oracle索引的使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“oracle索引的使用”吧!----索引反键索引t1  &...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作