广告
返回顶部
首页 > 资讯 > 数据库 >oracle性能调优-虚拟索引
  • 482
分享到

oracle性能调优-虚拟索引

2024-04-02 19:04:59 482人浏览 独家记忆
摘要

一、引言     DBA在日常维护管理数据库进行低性能sql分析时,有时候需要通过创建索引对SQL进行优化,但有些时候我们创建的索引是否能用到?这个只能创建以

一、引言

    DBA在日常维护管理数据库进行低性能sql分析时,有时候需要通过创建索引对SQL进行优化,但有些时候我们创建的索引是否能用到?这个只能创建以后才能看出效果,但是在实际工作中,特别是对大表创建索引对系统性能有很大影响,因此我们不得不避开业务高峰时段,但是有没有一种办法创建索引而不影响性能呢?有,那就是虚拟索引。

    虚拟索引不是物理存在的,它并不会创建实际的索引段,只是在数据字典中加了一个索引的记录,使得优化器能够意识到一个索引的存在,从而判断是否使用该索引作为访问路径。作用仅仅是为了DBA作SQL优化时使用,DBA根据虚拟索引的优化效果决定是否创建物理索引。

二、虚拟索引类型

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

三、虚拟索引创建实例

SQL> create table scott.t as select * from dba_objects;

Table created.


SQL> alter session set "_use_nosegment_indexes"=true;

Session altered.


SQL> create index scott.ix_t_id on scott.t(object_id) nosegment;

Index created.


SQL> set autot traceonly

SQL> select * from scott.t where object_id=1;

no rows selected


Execution Plan

----------------------------------------------------------

Plan hash value: 206018885

---------------------------------------------------------------------------------------

| Id  | Operation                   | Name    | Rows  | Bytes | Cost (%CPU)| Time     |

---------------------------------------------------------------------------------------

|   0 | SELECT STATEMENT            |         |    14 |  2898 |     5   (0)| 00:00:01 |

|   1 |  TABLE ACCESS BY INDEX ROWID| T       |    14 |  2898 |     5   (0)| 00:00:01 |

|*  2 |   INDEX RANGE SCAN          | IX_T_ID |   330 |       |     1   (0)| 00:00:01 |

---------------------------------------------------------------------------------------

Predicate Information (identified by operation id):

---------------------------------------------------

   2 - access("OBJECT_ID"=1)

Note

-----

   - dynamic sampling used for this statement (level=2)

Statistics

----------------------------------------------------------

          4  recursive calls

          0  db block gets

       1308  consistent gets

       1239  physical reads

          0  redo size

       1343  bytes sent via SQL*Net to client

        512  bytes received via SQL*Net from client

          1  SQL*Net roundtrips to/from client

          0  sorts (memory)

          0  sorts (disk)

          0  rows processed


-- 以下看的是真实执行计划,显然是用不到索引。

SQL> set autot off

SQL> alter session set statistics_level=all;

Session altered.


SQL> select * from scott.t where object_id=1;

no rows selected


SQL> select * from table(dbms_xplan.display_cursor(null,null,'allstats last'));

PLAN_TABLE_OUTPUT

-------------------------------------------------------------------------------------

SQL_ID  2qhwh0nzrzx2r, child number 1

-------------------------------------

select * from t where object_id=1

Plan hash value: 1601196873

---------------------------------------------------------------------------------------------

| Id  | Operation         | Name | Starts | E-Rows | A-Rows |   A-Time   | Buffers | Reads  |

---------------------------------------------------------------------------------------------

|   0 | SELECT STATEMENT  |      |      1 |        |      0 |00:00:00.52 |    1242 |   1239 |

|*  1 |  TABLE ACCESS FULL| T    |      1 |     14 |      0 |00:00:00.52 |    1242 |   1239 |

---------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):

---------------------------------------------------

   1 - filter("OBJECT_ID"=1)

Note

-----

   - dynamic sampling used for this statement (level=2)

22 rows selected.


-- 从数据字段中是无法找到这个索引的。

SQL> select index_name,status from dba_indexes where table_name='T';

no rows selected


四、虚拟索引的特点

    4.1、虚拟索引无法执行alter index选项

SQL> alter index scott.IX_T_ID rebuild;

alter index scott.IX_T_ID rebuild

*

ERROR at line 1:

ORA-08114: can not alter a fake index

    4.2、使用回收站特性的时候,虚拟索引必须先drop,才能创建同名的索引。

SQL> drop table scott.t;

Table dropped.


SQL> flashback table scott.t to before drop;

Flashback complete.


SQL> create index scott.idx_t_id on scott.t(object_id) nosegment;

create index scott.idx_t_id on scott.t(object_id) nosegment

                  *

ERROR at line 1:

ORA-00955: name is already used by an existing object

oracle性能调优-虚拟索引

    4.3、不能创建和虚拟索引同名的实际索引;

    4.4、可以创建和虚拟索引包含相同列但不同名的实际索引;

    4.5、虚拟索引在数据字典里看不到


您可能感兴趣的文档:

--结束END--

本文标题: oracle性能调优-虚拟索引

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

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • oracle性能调优-虚拟索引
    一、引言     DBA在日常维护管理数据库进行低性能SQL分析时,有时候需要通过创建索引对SQL进行优化,但有些时候我们创建的索引是否能用到?这个只能创建以...
    99+
    2022-10-18
  • Oracle虚拟索引
    从9.2版本开始Oracle引入了虚拟索引的概念,虚拟索引是一个“伪造”的索引,它的定义只存在数据字典中并有存在相关的索引段。虚拟索引是为了在不真正创建索引的情况下,验证如果使用索引sql执行计划是否改变,...
    99+
    2022-10-18
  • Oracle中怎么实现虚拟索引
    Oracle中怎么实现虚拟索引,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1.创建一个测试表testSQL> create&...
    99+
    2022-10-18
  • oracle 19c虚拟要下自动索引测试
    1.关于测试 最近oracle举办了一系列线上分享,其中一个19c的新特性是自动索引。自己在docker中测试了一下,失败。 [oracle@8aa96a41b58b ~]$ sqlplus / as sy...
    99+
    2022-10-18
  • oracle 10g性能调优
    原文http://www.oracle.com/technetwork/articles/schumacher-analysis-099313.html 数据库Oracle 10 g,许多以前难以得到的响应...
    99+
    2022-10-18
  • oracle单列索引和组合索引性能测试
    共有两张表t1,t2t1的表结构t2的表结构t1和t2通过insert into t1 values ('www','aaa','bbb');insert into t1 values ('www1','a...
    99+
    2022-10-18
  • MySQL使用索引优化性能
    目录1.索引问题2.索引的存储分类3.如何使用索引3.1使用索引3.2存在索引但不使用索引4.查看索引使用情况5.两个简单实用的优化方法5.1定期分析表和检查表5.2定期优化表1.索...
    99+
    2022-11-13
  • oracle性能调优学习0621
    1.PLAN_tablecolumn query_plan format a55column cardinality format 99999column cost format 99999delet...
    99+
    2022-10-18
  • oracle性能调优学习0622
    查询数据库中的等待事件:SET lines 100SET pages 10000COLUMN wait_class format a12COLUMN event format a30COLUMN total...
    99+
    2022-10-18
  • Mysql性能优化之索引下推
    索引下推(index condition pushdown )简称ICP,在Mysql5.6的版本上推出,用于优化查询。 在不使用ICP的情况下,在使用非主键索引(又叫普通索引或者二级索引)进行查询时,存储引擎通过索...
    99+
    2022-05-19
    Mysql 索引下推
  • MySQL查询性能优化索引下推
    目录前言1. 索引下推的作用2. 案例实践3. 索引下推配置4. 索引下推原理剖析5. 索引下推应用范围前言 前面已经讲了mysql的其他查询性能优化方式,没看过可以去了解一下: MySQL查询性能优化七种方式索引潜水 ...
    99+
    2022-08-16
    MySQL查询性能优化 MySQL索引下推
  • MySQL高性能索引策略和查询性能优化
    前缀索引和索引选择性 有时候需要索引很长的字符,这会让索引变得大且慢。一个策略是模拟哈希索引。 通常可以索引开始的部分字符,这样可以大大解约索引空间,提高索引效率。但这样会降低索引的选择性。 索引的选择性:不重复的索引值(也成为基数)和...
    99+
    2017-05-17
    MySQL高性能索引策略和查询性能优化
  • 通过案例学调优之--Oracle中null使用索引
    通过案例学调优之--Oracle中null使用索引     默认情况下,Oracle数据库,null在Index上是不被存储的,当在索引列以“is null”的方式访问时,无法...
    99+
    2022-10-18
  • oracle中使用索引与不使用索引的性能对比分析
    oracle中使用索引与不使用索引的性能对比分析,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。前言Oracle存储索引的数据结构是B*树。...
    99+
    2022-10-18
  • MYSQL性能故障优化利器之索引优化
                     &...
    99+
    2022-10-18
  • Mysql性能优化:什么是索引下推?
    导读 本文章始发于本人公众号:码猿技术专栏,原创不易,谢谢关注推荐。 索引下推(index condition pushdown )简称ICP,在Mysql5.6的版本上推出,用于优化查询。 在不使用ICP的情况下,在使用...
    99+
    2018-12-31
    Mysql性能优化:什么是索引下推?
  • Java实时重定向索引:如何优化搜索引擎的性能?
    搜索引擎是我们日常生活中不可或缺的工具,对于搜索引擎来说,搜索速度和搜索结果的准确性是至关重要的。如何提高搜索引擎的性能,让用户能够更快地获取到想要的结果,是每个搜索引擎开发人员都需要关注和解决的问题。在本文中,我们将介绍一种优化搜索引擎...
    99+
    2023-09-21
    实时 重定向 索引
  • 索引优化系列十四--啥时分区索引性能反而低
    drop table part_tab purge;create table part_tab (id int,col2 int,col3 int)      &nb...
    99+
    2022-10-18
  • 怎么进行MySQL性能优化中的索引优化
    本篇文章为大家展示了怎么进行MySQL性能优化中的索引优化,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。大家都知道索引对于数据访问的性能有非常关键的作用,都知道索引...
    99+
    2022-10-19
  • MySQL性能优化1-MySQL底层索引结构
    ❤️ 个人主页:程序员句号 🚀 支持水滴:点赞👍 + 收藏⭐ + 留言💬+关注 🌸 订阅专栏:MySQL性能调优 MySQL性能优化专栏 1.MySQL性能优化1-MyS...
    99+
    2023-08-23
    mysql 性能优化 数据库
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作