热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

oracle使索引不可见,关于oracle的不可见索引探究

--FDH一、关于oracle的不可见索引oracle对于不可见索引的给出的官方定义是:AninvisibleindexismaintainedbyDMLoperat

--FDH

一、关于oracle的不可见索引

oracle对于不可见索引的给出的官方定义是:

An invisible indexis maintained by

DML operations and is not used by default by the optimizer. Making an index

invisible is an alternative to making it unusable or dropping it. Invisible

indexes are especially useful for testing the removal of an index before

dropping it or using indexes temporarily without affecting the overall

application.

大致翻译为:

不可见索引在 DML 操作中会被维护,但在默认情况下优化器不会使用它。使索引不可见是使其不可用或删除它的一种替代方法。不可见索引有时特别有用,比如在删除索引前测试移除后果,或临时用一下索引而不会影响整个应用程序。

二、关于oracle不可见索引的实验

2.1创建表和索引:

创建表

T_test_index:

create table T_test_index (id number,name varchar2(40),bz varchar2(50));

添加数据:

begin

for c in 1 .. 10000 loop

insert into T_test_index values (c, 'fdh', '');

end loop;

end;

创建正常索引I_T_TEST_INDEX_ID:

create index I_T_TEST_INDEX_ID on T_test_index(id);

收集统计信息:

begin

dbms_stats.gather_table_stats('scott', 'T_TEST_INDEX', cascade => true);

end;

查看索引的状态和是否可见:

bd11236616215b79b600af785b83eb07.png

查看谓词带有ID列的执行计划:

564c0aaee90401facab27241795fc0cd.png

2.2将索引设为不可见:

alter index I_T_TEST_INDEX_ID invisible;

查看是否修改成功:

54fdae1351990f2e3ddf46ff9298e044.png

查看谓词带有ID列的执行计划:

d995dca2247d5b8b9d9926c7e88da4eb.png

果然将索引I_T_TEST_INDEX_ID 设置为不可见之后,优化器不会再考虑索引的扫描。

好了,到这里有一个问题,如果在SQL上面添加强制使用该不可见索引的HNIT,那么优化器是否会选择索引呢?下面我们再SQL语句中添加强制索引HNIT:

c404373b4eeaaf0f26838cbbdf1b2ed6.png

很显然优化器还是没有使用索引,依然还是全表扫描。所以当索引不可见时,即使hnit也无法改变使优化器使用该索引。

2.3使用不可见索引的方法:

修改session的参数:

alter session set

optimizer_use_invisible_indexes = true;

修改之后再该session上的运行上述同样的SQL的执行计划变更为:

a077be01f16fb34ac63f29129b84f404.png

所以当索引被设为不可见时,并非完全不可用。

可以通过修改参数optimizer_use_invisible_indexes为true来使用(默认为false,system级别和session级别都可以修改)

三、总结

1、当索引变更为不可见的时候,只是对oracle的优化器不可见。

2、不可见索引在DML操作的时候也会被维护。

3、加HNIT对不可见索引无效。

4、可以通过修改system级别和session级别参数来使用不可见索引。



推荐阅读
  • ALTERTABLE通过更改、添加、除去列和约束,或者通过启用或禁用约束和触发器来更改表的定义。语法ALTERTABLEtable{[ALTERCOLUMNcolu ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了一种划分和计数油田地块的方法。根据给定的条件,通过遍历和DFS算法,将符合条件的地块标记为不符合条件的地块,并进行计数。同时,还介绍了如何判断点是否在给定范围内的方法。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • 展开全部下面的代码是创建一个立方体Thisexamplescreatesanddisplaysasimplebox.#Thefirstlineloadstheinit_disp ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
author-avatar
捕鱼达人2502868831
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有