添加、删除索引一直是一个比较头痛的问题。不在正式环境中进行添加、删除操作,很难了解索引对执行计划的影响。而在正式环境中添加、删除索引,又很容易影响其他SQL的执行计划,从而导致系统出现性能问题。

Oracle11g新增了INVISIBLE INDEX功能,可以新增一个不可见的索引,或者将目前的索引变为不可见。除非指定了参数,否则优化器不会使用这种状态的索引。

SQL> CREATE TABLE T AS SELECT * FROM DBA_OBJECTS; 表已创建。 SQL> CREATE INDEX IND_T_OWNER ON T (OWNER); 索引已创建。 SQL> EXEC DBMS_STATS.GATHER_TABLE_STATS(USER, 'T') PL/SQL 过程已成功完成。 SQL> SET AUTOT ON EXP SQL> SELECT COUNT(*) FROM T WHERE OWNER = 'YANGTK'; COUNT(*) ---------- 24 执行计划 ---------------------------------------------------------- Plan hash value: 225622394 ------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | ------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 6 | 8 (0)| 00:00:01 | | 1 | SORT AGGREGATE | | 1 | 6 | | | |* 2 | INDEX RANGE SCAN| IND_T_OWNER | 3108 | 18648 | 8 (0)| 00:00:01 | ------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 2 - access("OWNER"='YANGTK') SQL> ALTER INDEX IND_T_OWNER INVISIBLE; 索引已更改。 SQL> SELECT COUNT(*) FROM T WHERE OWNER = 'YANGTK'; COUNT(*) ---------- 24 执行计划 ---------------------------------------------------------- Plan hash value: 2966233522 --------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | --------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 6 | 284 (1)| 00:00:04 | | 1 | SORT AGGREGATE | | 1 | 6 | | | |* 2 | TABLE ACCESS FULL| T | 3108 | 18648 | 284 (1)| 00:00:04 | --------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 2 - filter("OWNER"='YANGTK')

如果希望优化器考虑不可见索引,可以在系统级或会话级设置初始化参数:OPTIMIZER_USE_INVISIBLE_INDEXES设置为TRUE:

SQL> SHOW PARAMETER OPTIMIZER_USE_INVISIBLE_INDEXES NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ optimizer_use_invisible_indexes boolean FALSE SQL> ALTER SESSION SET OPTIMIZER_USE_INVISIBLE_INDEXES = TRUE; 会话已更改。 SQL> SELECT COUNT(*) FROM T WHERE OWNER = 'YANGTK'; COUNT(*) ---------- 24 执行计划 ---------------------------------------------------------- Plan hash value: 225622394 ------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | ------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 6 | 8 (0)| 00:00:01 | | 1 | SORT AGGREGATE | | 1 | 6 | | | |* 2 | INDEX RANGE SCAN| IND_T_OWNER | 3108 | 18648 | 8 (0)| 00:00:01 | ------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 2 - access("OWNER"='YANGTK')

可以通过USER_INDEXES的新增字段VISIBILITY字段来查看索引的可见性:

SQL> SET AUTOT OFF
SQL> CREATE INDEX IND_T_NAME ON T (OBJECT_NAME);
索引已创建。
SQL> SELECT INDEX_NAME, VISIBILITY FROM USER_INDEXES WHERE TABLE_NAME = 'T';
INDEX_NAME VISIBILIT
------------------------------ ---------
IND_T_NAME VISIBLE
IND_T_OWNER INVISIBLE

利用不可见索引可以在不影响其他会话的情况下查看索引建立后的效果。在删除索引之前可以将索引先至于不可见状态,这样一旦发现索引不应该被删除,索引的恢复将会十分迅速。

Oracle11g新特性:在线操作功能增强-Oracle11g新增的不可见索引 (转载)相关推荐

  1. Oracle11g新特性:在线操作功能增强-Oracle11g在线重定义功能对物化视图... (转载)

    Oracle的在线重定义功能就是利用了物化视图的功能,通过物化视图日志的记录功能,来同步目标表和基表的数据.因此,在11g以前,建立了物化视图日志的表是无法进行在线重定义操作的: SQL> CR ...

  2. Oracle11g新特性:在线操作功能增强-Oracle11g的只读表功能

    在11g以前,Oracle提供的只读功能只到了数据库级和表空间级: SQL> CONN / AS SYSDBA Connected. SQL> SHUTDOWN IMMEDIATE Dat ...

  3. Oracle11g新特性:在线操作功能增强-Oracle11g在线重建索引功能增强 (转载)

    Oracle 11g加强了ONLINE REBUILD索引功能,减少了ONLINE REBUILD索引过程中对DML操作的阻塞.下面看看10g中和11g在线重建索引的差别,首先登陆10g: SQL&g ...

  4. oracle数据泵能增量吗,Oracle12c中数据泵新特性之功能增强(expdp, impdp)

    Oracle的数据泵功能在10g中被引进.本文对数据泵在12c中的增强做一个概览. 1. 禁用日志选项(DISABLE_ARCHIVE_LOGGING) Impdp的TRANSFORM参数已经扩展为包 ...

  5. oracle 分区表 变大,Oracle11G新特性:分区表分区默认segment大小64k变为8M

    Oracle11G新特性:分区表分区默认segment大小64k变为8M 2017-02-08 在oracle11.2创建分区表,每个分区默认大小为8M,是由_partition_large_exte ...

  6. Android 6.0系统新特性及功能说明

    本文通过翻译官方文档和google开发者大会资料收集得出,转载请注明出处. Android 6.0系统新特性及功能说明... 1 1       优化用户体验:... 1 1.1        应用权 ...

  7. Java 12 新特性与功能

    Java 12 新特性与功能 Java 12是Java SE的第12个版本,于2019年3月19日发布.Java 12的发布背景主要是为了帮助开发人员更加高效的进行编程工作,提高Java的性能和稳定性 ...

  8. oracle11gR版本GI中新增,Oracle11g新特性MemberKillEscalation简介

    从oracle 11gR1 开始,Member Kill Escalation的出现成功的解决了前面提到的情况.当实例eviction在指定的时间内(默认20秒)不能 首先我们介绍一下历史.在Orac ...

  9. Oracle11g新特性简介

    转 Oracle 11g 新特性简介https://blog.csdn.net/tianlesoftware/article/details/5134819  Oracle 11g于2007年7月11 ...

最新文章

  1. 在Ubuntu 14.04 64bit上安装python-pyqt5软件包(python 2.7)
  2. 1.进程间的关系:终端,网络设备
  3. linux系统无root权限lua库安装,liunx系统中安装lua以及torch
  4. Python-OpenCV快速教程
  5. Spring3.0包描述
  6. sql程序实现事物锁表和解锁_怎样用SQL给SQL2880特定表加锁解锁
  7. 我想加入阿里,我该怎么做?
  8. Spark项目 error while loading <root>, error in opening zip file
  9. python3GUI--做一款某雷影音播放器By:PyQt5
  10. [区块链]对话区块链人工智能顶级实力公司ObEN
  11. c语言swap是什么,swap(什么是swap)
  12. 奈奎斯特定理与香农定理
  13. Simulink模型如何做单元测试
  14. java如何将mp4写入光盘_iOS - 读取/写入mp4视频的XMP元数据
  15. (笔记)Bison 的使用说明
  16. 百度图像识别API调用(python)
  17. 【STM32】R05D电控红外协议的美的空调遥控器
  18. JPA开发(下)一(多)对多的配置与crud操作
  19. weChat applet 微信小程序(2) WXSS 小程序组件
  20. 图像篡改数据集CASIA 1.0分享 001

热门文章

  1. 点、圆和线的转化关系
  2. python映射的主要特点_30 个 Python 语言的特点技巧
  3. python 性能测试_python 写一个性能测试工具(一)
  4. python的for语句要用冒号吗_python中循环的写法 for
  5. layui如何存在多个弹窗_web前端:layer重复弹出(layui弹层同时存在多个)的解决方法...
  6. 计算机排名考研,计算机考研学校排名
  7. java给界面添加滚动条_Java Swing学习笔记:要求会默写或熟练的,GUI,控件,设置列或行,加滚动条,新界面...
  8. JAVA学习-JAVA实现1-100的累加
  9. mysql5.7安装完成后密码是多少_安装了mysql5.7后,如何进行配置(密码等)初始化...
  10. 微软宣布 Windows 10X:用于可折叠 PC 的新操作系统