阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Oracle性能优化之虚拟索引

387次阅读
没有评论

共计 4630 个字符,预计需要花费 12 分钟才能阅读完成。

虚拟索引是定义在数据字典中的伪索引,但没有相关的索引段。虚拟索引的目的是模拟索引的存 – 而不用真实的创建一个完整索引。这允许开发者创建虚拟索引来查看相关执行计划而不用等到真实创建完索引才能查看索引对执行计划的影响,并且不会增加存储空间的使用。如果我们观察到优化器生成了一个昂贵的执行计划并且 SQL 调整指导建议我们对某些的某列创建索引,但在生产数据库环境中创建索引与测试并不总是可以操作。我们需要确保创建的索引将不会对数据库中的其它查询产生负面影响,因此可以使用虚拟索引。

下面举例进行说明
1. 创建一个测试表 test
SQL> create table test as select * from dba_objects;

Table created.

2. 从表 test 查询 object_name 等于 standard 的记录
SQL> select * from test where object_name=’STANDARD’;

OWNER
——————————
OBJECT_NAME
——————————————————————————–
SUBOBJECT_NAME                  OBJECT_ID DATA_OBJECT_ID OBJECT_TYPE
—————————— ———- ————– ——————-
CREATED      LAST_DDL_TIM TIMESTAMP          STATUS  T G S
———— ———— ——————- ——- – – –
SYS
STANDARD
                                      888                PACKAGE
19-APR-10    19-APR-10    2003-04-18:00:00:00 VALID  N N N

OWNER
——————————
OBJECT_NAME
——————————————————————————–
SUBOBJECT_NAME                  OBJECT_ID DATA_OBJECT_ID OBJECT_TYPE
—————————— ———- ————– ——————-
CREATED      LAST_DDL_TIM TIMESTAMP          STATUS  T G S
———— ———— ——————- ——- – – –
SYS
STANDARD
                                      889                PACKAGE BODY
19-APR-10    19-APR-10    2010-04-19:10:22:58 VALID  N N N

3. 查询上面查询的执行计划
SQL> set autotrace traceonly explain
SQL> select * from test where object_name=’STANDARD’;

Execution Plan
———————————————————-
Plan hash value: 1357081020

————————————————————————–
| Id  | Operation        | Name | Rows  | Bytes | Cost (%CPU)| Time    |
————————————————————————–
|  0 | SELECT STATEMENT  |      |    8 |  1416 |  155  (1)| 00:00:02 |
|*  1 |  TABLE ACCESS FULL| TEST |    8 |  1416 |  155  (1)| 00:00:02 |
————————————————————————–

Predicate Information (identified by operation id):
—————————————————

  1 – filter(“OBJECT_NAME”=’STANDARD’)

Note
—–
  – dynamic sampling used for this statement

 

4. 在表 test 的 object_name 列上创建一个虚拟索引
SQL> create index test_index on test(object_name) nosegment;

Index created.

为了创建虚拟索引必须在 create index 语句中指定 nosegment 子句,并且不会创建索引段。

5. 来验证虚拟索引不会创建索引段
SQL> set autotrace off
SQL> select index_name from dba_indexes where table_name = ‘TEST’ and index_name = ‘TEST_INDEX’;

no rows selected

SQL> col OBJECT_NAME format a20;
SQL> select object_name, object_type from dba_objects where object_name = ‘TEST_INDEX’;

OBJECT_NAME          OBJECT_TYPE
——————– ——————-
TEST_INDEX          INDEX

从上面的结果可以看到索引对象已经创建,但没有创建索引段。

6. 重新执行 sql 查看创建的虚拟索引是否被使用
SQL> set autotrace traceonly explain
SQL> select * from test where object_name=’STANDARD’;

Execution Plan
———————————————————-
Plan hash value: 1357081020

————————————————————————–
| Id  | Operation        | Name | Rows  | Bytes | Cost (%CPU)| Time    |
————————————————————————–
|  0 | SELECT STATEMENT  |      |    8 |  1416 |  155  (1)| 00:00:02 |
|*  1 |  TABLE ACCESS FULL| TEST |    8 |  1416 |  155  (1)| 00:00:02 |
————————————————————————–

Predicate Information (identified by operation id):
—————————————————

  1 – filter(“OBJECT_NAME”=’STANDARD’)

Note
—–
  – dynamic sampling used for this statement

从上面的执行计划可以清楚地看到创建的虚拟索引并没有被使用

7. 为了能使用所创建的虚拟索引,需要将_USE_NOSEGMENT_INDEXES 设置为 true
SQL> alter session set “_USE_NOSEGMENT_INDEXES” = true;

Session altered.

8. 重新执行 sql 查看创建的虚拟索引是否被使用
SQL> set long 900
SQL> set linesize 900
SQL> select * from test where object_name=’STANDARD’;

Execution Plan
———————————————————-
Plan hash value: 2627321457

——————————————————————————————
| Id  | Operation                  | Name      | Rows  | Bytes | Cost (%CPU)| Time    |
——————————————————————————————
|  0 | SELECT STATEMENT            |            |    8 |  1416 |    5  (0)| 00:00:01 |
|  1 |  TABLE ACCESS BY INDEX ROWID| TEST      |    8 |  1416 |    5  (0)| 00:00:01 |
|*  2 |  INDEX RANGE SCAN          | TEST_INDEX |  238 |      |    1  (0)| 00:00:01 |
——————————————————————————————

Predicate Information (identified by operation id):
—————————————————

  2 – access(“OBJECT_NAME”=’STANDARD’)

Note
—–
  – dynamic sampling used for this statement

从上面的执行计划可以看到当设置隐含参数_USE_NOSEGMENT_INDEXES 后,优化器将会使用创建的虚拟索引。在使用虚拟索引需要注意,我们可以分析虚拟索引,但不能重建虚拟索引,如果重建虚拟索引会收到 ORA-8114: “User attempted to alter a fake index” 错误提示,可以删除虚拟索引。

更多 Oracle 相关信息见 Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12

本文永久更新链接地址 :http://www.linuxidc.com/Linux/2016-04/130342.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计4630字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19348
评论数
4
阅读量
7804808
文章搜索
热门文章
开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南 大家好,我是星哥。之前介绍了腾讯云的 Code...
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板 1Panel:小白轻松构建 Web 服务与面板加固指南 哈喽,我是星哥,经常有人问我不...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
使用1Panel面板搭建属于你的AI项目环境

使用1Panel面板搭建属于你的AI项目环境

使用 1Panel 面板搭建属于你的 AI 项目环境 在 AI 项目越来越火的今天,很多朋友都想自己动手搭建一...
三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

  三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Andr...
星哥带你玩飞牛NAS-16:不再错过公众号更新,飞牛NAS搭建RSS

星哥带你玩飞牛NAS-16:不再错过公众号更新,飞牛NAS搭建RSS

  星哥带你玩飞牛 NAS-16:不再错过公众号更新,飞牛 NAS 搭建 RSS 对于经常关注多个微...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
告别Notion焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁”

告别Notion焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁”

  告别 Notion 焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁” 引言 在数字笔记工...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
星哥带你玩飞牛NAS-16:不再错过公众号更新,飞牛NAS搭建RSS

星哥带你玩飞牛NAS-16:不再错过公众号更新,飞牛NAS搭建RSS

  星哥带你玩飞牛 NAS-16:不再错过公众号更新,飞牛 NAS 搭建 RSS 对于经常关注多个微...
星哥带你玩飞牛 NAS-9:全能网盘搜索工具 13 种云盘一键搞定!

星哥带你玩飞牛 NAS-9:全能网盘搜索工具 13 种云盘一键搞定!

星哥带你玩飞牛 NAS-9:全能网盘搜索工具 13 种云盘一键搞定! 前言 作为 NAS 玩家,你是否总被这些...
星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

星哥带你玩飞牛 NAS-14:解锁公网自由!Lucky 功能工具安装使用保姆级教程 作为 NAS 玩家,咱们最...
浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍

浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍

浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍 前言 在 AI 自动化快速发展的当下,浏览器早已不再只是...
支付宝、淘宝、闲鱼又双叕崩了,Cloudflare也瘫了连监控都挂,根因藏在哪?

支付宝、淘宝、闲鱼又双叕崩了,Cloudflare也瘫了连监控都挂,根因藏在哪?

支付宝、淘宝、闲鱼又双叕崩了,Cloudflare 也瘫了连监控都挂,根因藏在哪? 最近两天的互联网堪称“故障...