本博客记录一下Oracle虚拟索引的用法,虚拟索引是定义在数据字典中的伪索引,可以说是伪列,没有修改的索引字段的。虚拟索引的目的模拟索引,不会增加存储空间的使用,有了虚拟索引,开发者使用执行计划的时候也不需要等索引完全创建好才可以看到效果

ok,这里找张用户表来测试一下虚拟索引

//设置执行计划
SQL> set autotrace traceonly //查询用户,因为没加索引,所以是全表扫描
SQL> select * from sys_user where username='admin'; //创建虚拟索引,记得加关键字nosegment
SQL>create index idx_username on sys_user(username) nosegment; //先关了执行计划自动打印
SQL>set autotrace off //查一下索引表里有对应索引字段?这里没查到,说明虚拟索引并没有创建索引列
SQL> select index_name from dba_indexes where table_name='sys_user' and index_n
ame='IDX_USERNAME';
未选定行 //再查一下索引对象里有数据?这里可以查到,说明虚拟索引还是有创建索引对象的
SQL> select object_name,object_type from dba_objects where object_name='IDX_USER
NAME';
OBJECT_NAME OBJECT_TYPE
-------------------- -------------------
IDX_USERNAME INDEX //再开启执行计划自动打印
SQL> set autotrace traceonly //查询一下,发现还是TABLE ACCESS FULL,并没有走索引,不是创建了虚拟索引了?
SQL> select * from sys_user where username='admin';
执行计划
----------------------------------------------------------
Plan hash value: 4234589240
------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 272 | 3 (0)| 00:00:01 |
|* 1 | TABLE ACCESS FULL| SYS_USER | 1 | 272 | 3 (0)| 00:00:01 |
------------------------------------------------------------------------------
...//省略执行计划信息 //注意:虚拟索引使用,需要设置一下,改为true才可以
SQL> alter session set "_USE_NOSEGMENT_INDEXES" = true;
会话已更改。 //再次查询,可以看到走虚拟索引了,TABLE ACCESS BY INDEX ROWID,虚拟索引使用成功
SQL> select * from sys_user where username='admin';
执行计划
----------------------------------------------------------
Plan hash value: 1796849462
--------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)
| Time |
--------------------------------------------------------------------------------
------------
| 0 | SELECT STATEMENT | | 1 | 272 | 2 (0)
| 00:00:01 |
| 1 | TABLE ACCESS BY INDEX ROWID| SYS_USER | 1 | 272 | 2 (0)
| 00:00:01 |
|* 2 | INDEX RANGE SCAN | IDX_USERNAME | 1 | | 1 (0)
| 00:00:01 |
...//省略执行计划信息

综上分析,虚拟索引创建关键的步骤是:

alter session set "_use_nosegment_indexes"=true;

create index index_name on table_name(col_name) nosegment;

虚拟索引也可以删除,用法和删索引一样:

drop index [索引名称] on [表格名称]

这里就是虚拟索引的简要介绍,假如在生产环境,怕加了索引影响系统性能,或许可以加虚拟索引,怕占太多存储空间,也可以加上虚拟索引,虚拟索引有时候常被用于SQL调优,虚拟索引关键字是nosegment

Oracle性能调优之虚拟索引用法简介的更多相关文章

  1. Oracle性能调优之物化视图用法简介

    目录 一.物化视图简介 二.实践:创建物化视图 一.物化视图简介 物化视图分类 物化视图分类,物化视图语法和as后面的sql分为: (1) 基于主键的物化视图(主键物化视图) (2)基于Rowid的物 ...

  2. Oracle SQL调优之绑定变量用法简介

    目录 一.SQL执行过程简介 二.绑定变量典型用法 2.1.在SQL中绑定变量 2.2.在PL/SQL中使用绑定变量 2.3.PL/SQL批量绑定变量 2.4.Java代码里使用绑定变量 最近在看&l ...

  3. OCM_第十四天课程:Section6 —》数据库性能调优_各类索引 /调优工具使用/SQL 优化建议

    注:本文为原著(其内容来自 腾科教育培训课堂).阅读本文注意事项如下: 1:所有文章的转载请标注本文出处. 2:本文非本人不得用于商业用途.违者将承当相应法律责任. 3:该系列文章目录列表: 一:&l ...

  4. [转]oracle性能调优之--Oracle 10g AWR 配置

    一.ASH和AWR的故事 1.1 关于ASH 我们都知道,用户在ORACLE数据库中执行操作时,必然要创建相应的连接和会话,其中,所有当前的会话信息都保存在动态性能视图V$SESSION中,通过该视图 ...

  5. Oracle 性能调优 10053事件

    思维导图 10053事件概述 我们在查看一条SQL语句的执行计划时,只看到了CBO最终告诉我们的执行计划结果,但是我们并不知道CBO为何要这样做. 特别是当执行计划明显失真时,我们特别想搞清楚为什么C ...

  6. SQLServer性能调优3之索引(Index)的维护

    前言 前一篇的文章介绍了通过建立索引来提高数据库的查询性能,这其实只是个开始.后续如果缺少适当的维护,你先前建立的索引甚至会成为拖累,成为数据库性能的下降的帮凶. 查找碎片 消除碎片可能是索引维护最常 ...

  7. Oracle性能调优(AWR)

    一.AWR报告 AWR 是通过对比两次快照(snapshot)收集到的统计信息,来生成报表数据,生成的报表包括多个部分,这点与Statspack生成的报告非常类似.不过AWR在生成报告时,可以选择生成 ...

  8. Oracle 性能调优 SQL_TRACE

    思维导图 Oracle优化10-SQL_TRACE解读 Oracle优化11-10046事件 概述 当我们想了解一条SQL或者是PL/SQL包的运行情况时,特别是当他们的性能非常差时,比如有的时候看起 ...

  9. Oracle 性能调优案例(代码级别)

    业务案例一: 业务:千万记录表中查询出50条符合条件的记录. 现象:oracle部署时跨机器,业务取得数据耗时10ms.造成业务性能不达标. 为了突出主题,对于异常分支,均已省略. 对于通常写法, o ...

随机推荐

  1. C# 使用Environment获取当前程序运行环境相关信息

    Enviroment类和AppDomain类前者表示系统级的相关信息,后者表示应用程序级的相关信息. 我常用这两个类获取一些程序运行目录.操作系统位数等信息: string basedir = App ...

  2. C++调用linux命令并获取返回值

    qt中封装了相关的方法, 但是因为我的命令中用到了管道命令, 出现了非预期结果, 所有改用了linux系统原生的方法. 下边是一个判断某进程是否存在的例子. 当前存在一个问题,当linux返回多行时, ...

  3. vertx-jersey

    允许在vert.x中创建JAX-RS Jersey资源.   入门 将vertx-jersey依赖项添加到您的项目中 <dependency> <groupId>com.eng ...

  4. Google开发者F12工具面板-network详解

    1 开发者工具面板    面板上包含了Elements面板.Console面板.Sources面板.Network面板.Performance面板.Memory面板.Application面板.Sec ...

  5. c++语法大全笔记(一)

    目录 一:初级知识   c++是一种中级语言,是c的扩充,是一种面向对象的程序设计语言,可以运行到多个平台.这里直接讲语法.   基础c++模板: #include <iostream> ...

  6. nodejs-翻转算法

    nodejs-翻转算法 /** * Created by moon on 2019/12/14. */ //程序运行完成时一定要有输出语句,本工具才能正确展示运行结果. function abc() ...

  7. mask-rcnn代码解读(四):rpn_feature_maps数据的处理

    此处模拟 rpn_feature_maps数据的处理,最终得到rpn_class_logits, rpn_class, rpn_bbox. 代码如下: import numpy as np'''层与层 ...

  8. JavaScript Location 对象用法

    Location 对象 Location对象包含有关当前URL的信息.location对象是window对象的一部分,可以通过window.location属性访问. 注意:没有适用于location ...

  9. Webpack相关原理浅析

    基本打包机制 本质上,webpack 是一个现代 JavaScript 应用程序的静态模块打包器(module bundler).当 webpack 处理应用程序时,它会递归地构建一个依赖关系图(de ...

  10. MySql常用操作【基础且详细(●'◡'●)】

    有那么挺长段时间没有敲代码了,今敲起来竟然有些sql都想不起来了