首页 > 数据库 >在 Oracle 数据库中,哪些操作会导致索引失效?

在 Oracle 数据库中,哪些操作会导致索引失效?

时间:2023-11-03 14:15:28浏览次数:38  
标签:数据库 口诀 索引 内存 失效 Oracle 手机

索引失效的七字口诀:模型数空运最快 ,字面意思就是运送一个模型,要用飞机空运,不要用陆运和海运,数空运最快。口诀中的每一个字都代表一种索引失效的类型。我逐个讲解一下。

1. 模:代表模糊查询。like的模糊查询以%开头,索引失效。

2. 型:代表数据类型。类型错误,如字段类型为varchar,where条件用number,索引也会失效。

3. 数:代表函数。对索引的字段使用内部函数,索引也会失效。这种情况下应该建立基于函数的索引。

4. 空:是Null的意思。索引不存储空值,如果不限制索引列是not null数据库会认为索引列有可能存在空值,所以不会按照索引进行计算。

5. 运:代表运算。对索引列进行加、减、乘、除等运算,会导致索引失效。

6. 最:代表最左原则。在复合索引中索引列的顺序至关重要。如果不是按照索引的最左列开始查找,则无法使用索引。

7. 快:全表扫描更快的意思。如果数据库预计使用全表扫描要比使用索引快,则不使用索引。

上面就是索引失效的七字口诀。模型数空运最快。更详细的解释大家可以翻看我之前的视频或文章。

 

下面我针对朋友们的一些疑问和看法简要回复一下。

1. 了解了B+树的原理,就不需要背这个索引失效的问题了。

关于这个说法我也赞同,但是需要弄清楚学习的对象是谁,我这个口诀主要是解决初学者面试时回答不上这个问题的情况的。如果是一个初学者,让他理解那么底层的原理显然是不现实的。而这个口诀恰恰能快速的解决面试回答不全的问题。

2. 里面有一些是错的,比如在新版的mysql上NULL情况也不会失效了。

这个确实是有一些特殊情况的,不同数据库引擎,不同数据库版本都有一些微小的差异。我们在实际项目工作中会遇到各种数据库,各种版本。所以索引失效的情况还是尽量要了解完整,不要因为新版本改进了,就忘记旧版本的这种失效情况了。但我还是非常感谢提出这些差异的朋友,做技术就需要这种严谨的精神。

3. 索引失效这个说法不对,索引不会失效,是没有使用到索引。

这个问题严格来说不算问题,索引失效是行业内约定俗成的叫法,你要是很认真的去研究用词,还会有很多这样的例子。比如说手机内存,到底是指手机的内存还是手机的硬盘呢?从字面理解手机内存是指手机的RAM,但在实际生活中大家说手机内存其实都是指手机的存储空间,手机上的硬盘。你非要因为这个和别人争辩对错就没什么意思了。

大家还有什么疑问和观点可以留言或私信给我,最后祝大家学习进步,工作顺利。

标签:数据库,口诀,索引,内存,失效,Oracle,手机
From: https://www.cnblogs.com/forestwolf/p/17807455.html

相关文章

  • 【Mquant】4:量化投研之配置本地数据库
    量化投研配置本地数据库是量化投资领域中非常重要的一环。通过搭建本地数据库,可以方便地存储和管理股票市场的日频数据,为后续的因子计算和策略研究提供支持。1.数据库搭建首先我们抛出一个问题:真的需要数据库吗?前段时间跑了一个回测代码(这里用的是mysql):用海龟策略跑2011年到......
  • Oracle字典表
    --查询某个表在哪些存储过程中被调用select*fromuser_sourceewheree.TYPE='PROCEDURE'andupper(e.TEXT)like'%%';--查看表的创建日期selectCREATED,LAST_DDL_TIME,s.*fromuser_objectsswhereobject_name=upper('ABC');--Oracle查询某个字段名出现在哪些表中SE......
  • SqlServer索引原理分析
       这正是SQLSERVER等数据库管理系统和dBASEX、ACCESS等数据库文件系统的本质区别,所以,对数据库管理系统操作能力的强弱在某种程度上也折射出了网管的水平——个人认为,称得上优秀的Admin,至少应该是一个称职的DBA(数据库管理员)。 下面以SQLSERVER(下称SQLS)为例,将数据库管理中......
  • SqlServer索引原理分析
       这正是SQLSERVER等数据库管理系统和dBASEX、ACCESS等数据库文件系统的本质区别,所以,对数据库管理系统操作能力的强弱在某种程度上也折射出了网管的水平——个人认为,称得上优秀的Admin,至少应该是一个称职的DBA(数据库管理员)。 下面以SQLSERVER(下称SQLS)为例,将数据库管理中......
  • PostgreSQL技术大讲堂 - 第32讲:数据库参数调整
     PostgreSQL从小白到专家,是从入门逐渐能力提升的一个系列教程,内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容,希望对热爱PG、学习PG的同学们有帮助,欢迎持续关注CUUGPG技术大讲堂。 第32讲:数据库参数调整 第32讲:11月04日(周六)19:30-20:30,......
  • MySQL 数据库 cpu 飙升的话,要怎么处理?
    排查过程:(1)使用top命令观察,确定是mysqld导致还是其他原因。(2)如果是mysqld导致的,showprocesslist,查看session情况,确定是不是有消耗资源的sql在运行。(3)找出消耗高的sql,看看执行计划是否准确,索引是否缺失,数据量是否太大。处理:(1)kill掉这些线程(同时观察cpu使用率是......
  • 无涯教程-H2数据库 - JDBC连接
    H2是一个JAVA数据库,无涯教程可以使用JDBC与该数据库进行交互,在本章中,无涯教程将看到与H2数据库创建JDBC连接以及如何与H2数据库创建CRUD操作。通常,创建JDBC连接有五个步骤。第1步-注册JDBC数据库驱动程序。Class.forName("org.h2.Driver");第2步-打开连接。Connection......
  • Mysql 唯一联合索引和 NULL允许重复
    我内心一直认为UNIQUEKEY是唯一的只允许出现一个null但是联合索引索引就打破了这个魔咒请看演示为null原因唯一索引的作用是确保组成索引的字段的值是唯一的。users唯一索引是由name、email和lebal字段组成的。users这三个字段的组合在表中已经存......
  • 无涯教程-H2数据库 - Rollback语句
    ROLLBACK用于将事务回滚到Savepoint或上一个事务,通过使用此命令,无涯教程可以回滚到特定的保存点,也可以回滚到先前执行的事务。Rollback-语法ROLLBACK命令有两种不同的语法。以下是rollback命令的通用语法。ROLLBACK[TOSAVEPOINTsavepointName]以下是回滚命令对特定......
  • oracle分页
    SELECTFROM  (  SELECT    T.,    ROWNUMRN  FROM    (SELECT*FROM表名WHERE条件)T  WHERE    ROWNUM<=((currentPage-1)*pageSize+pageSize)  )WHERE  RN>((currentPage-1)*pageSize)......