Oracle性能调优之虚拟索引用法简介
本博客记录一下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性能调优之虚拟索引用法简介的更多相关文章
- Oracle性能调优之物化视图用法简介
目录 一.物化视图简介 二.实践:创建物化视图 一.物化视图简介 物化视图分类 物化视图分类,物化视图语法和as后面的sql分为: (1) 基于主键的物化视图(主键物化视图) (2)基于Rowid的物 ...
- Oracle SQL调优之绑定变量用法简介
目录 一.SQL执行过程简介 二.绑定变量典型用法 2.1.在SQL中绑定变量 2.2.在PL/SQL中使用绑定变量 2.3.PL/SQL批量绑定变量 2.4.Java代码里使用绑定变量 最近在看&l ...
- OCM_第十四天课程:Section6 —》数据库性能调优_各类索引 /调优工具使用/SQL 优化建议
注:本文为原著(其内容来自 腾科教育培训课堂).阅读本文注意事项如下: 1:所有文章的转载请标注本文出处. 2:本文非本人不得用于商业用途.违者将承当相应法律责任. 3:该系列文章目录列表: 一:&l ...
- [转]oracle性能调优之--Oracle 10g AWR 配置
一.ASH和AWR的故事 1.1 关于ASH 我们都知道,用户在ORACLE数据库中执行操作时,必然要创建相应的连接和会话,其中,所有当前的会话信息都保存在动态性能视图V$SESSION中,通过该视图 ...
- Oracle 性能调优 10053事件
思维导图 10053事件概述 我们在查看一条SQL语句的执行计划时,只看到了CBO最终告诉我们的执行计划结果,但是我们并不知道CBO为何要这样做. 特别是当执行计划明显失真时,我们特别想搞清楚为什么C ...
- SQLServer性能调优3之索引(Index)的维护
前言 前一篇的文章介绍了通过建立索引来提高数据库的查询性能,这其实只是个开始.后续如果缺少适当的维护,你先前建立的索引甚至会成为拖累,成为数据库性能的下降的帮凶. 查找碎片 消除碎片可能是索引维护最常 ...
- Oracle性能调优(AWR)
一.AWR报告 AWR 是通过对比两次快照(snapshot)收集到的统计信息,来生成报表数据,生成的报表包括多个部分,这点与Statspack生成的报告非常类似.不过AWR在生成报告时,可以选择生成 ...
- Oracle 性能调优 SQL_TRACE
思维导图 Oracle优化10-SQL_TRACE解读 Oracle优化11-10046事件 概述 当我们想了解一条SQL或者是PL/SQL包的运行情况时,特别是当他们的性能非常差时,比如有的时候看起 ...
- Oracle 性能调优案例(代码级别)
业务案例一: 业务:千万记录表中查询出50条符合条件的记录. 现象:oracle部署时跨机器,业务取得数据耗时10ms.造成业务性能不达标. 为了突出主题,对于异常分支,均已省略. 对于通常写法, o ...
随机推荐
- WPF MVVM框架(5)
前面几章节所讲到的内容, 基本上属于前端XAML的使用方法, 那么本章及后面的章节, 则会侧重于UI与业务分离如何分离 . UI与业务逻辑之间的互操作性,, 下面将介绍WPF中, 比较主流的MVVM框 ...
- JDK1.8 Stream
Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据. Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达 ...
- SQL SERVER 用户自定义函数(UDF)深入解析
本文内容概要: UDF 概念.原理.优缺点.UDF 的分类 详细讲述3种 UDF 的创建.调用方法以及注意事项 UDF 的实践建议 基本原理: UDF:user-defined functions,用 ...
- 笔记15:Django提升篇
django提升 (1)打包应用程序:可重用性 打包 Python 程序需要工具:setuptools .打包时候建议使用django-appname 1 在你的 Django 项目目录外创建一个名为 ...
- RabbitMQ的几个常见问题
1. 如何保证消息尽量发送成功? 问题描述: 如果没有启动消费者,重启了RabbitMQ服务,队列和消息都会丢失. 解决方案: 针对这个问题,有以下几个机制可以解决: 生产者确认: 持久化: 手动AC ...
- pip安装指定版本的程序的命令
pip安装指定版本的程序的命令 pip install -i https://pypi.douban.com/simple/ django==1.10.3 或者 pip install django= ...
- 03-numpy-笔记-expand_dims
>>> x = np.array([[1,2,3],[4,5,6]]) >>> x.shape (2, 3) >>> np.expand_dims ...
- 一篇文章搞定git
git学习 一.背景(当成故事去读) Linus 虽然创建了 Linux,但 Linux 的壮大是靠全世界热心的志愿者参与的,这么多人在世界各地为 Linux 编写代码,那 Linux 的代码是如何管 ...
- 【Spring IoC】依赖注入DI(四)
平常的Java开发中,程序员在某个类中需要依赖其它类的方法.通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理. Spring提出了依赖注入的思想,即依赖类不由程 ...
- 【使用篇二】SpringBoot访问静态资源(4)
默认的,SpringBoot会从两个地方查找静态资源: classpath/static 的目录下 ServletContext 根目录下 一.classpath/static 的目录 在类路径下常见 ...