前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >什么情况下索引会失效?

什么情况下索引会失效?

原创
作者头像
用户8639654
修改于 2021-07-30 08:18:26
修改于 2021-07-30 08:18:26
6870
举报
文章被收录于专栏:云计算运维云计算运维

1.单独引用复合索引里非第⼀位置的索引列 假如有INDEX(a,b,c), 当条件为a或a,b或a,b,c时都可以使用索引,

但是当条件为b,c时将不会使用索引。

复合索引遵守“最左前缀”原则,即在查询条件中使用了复合索引的第 ⼀个字段,索引才会被使用。因此,在复合索引中索引列的顺序⾄关重要。如果不是按照索引的最左列开始查找,则⽆法使用索引。

2.对索引列运算,运算包括(+、-、*、/、!、、%、like’%_’(%放在前面)、or、in、exist等),导致索引失效。

错误的例⼦:select * from test where id-1=9;

正确的例⼦:select * from test where id=10;

注意!!

mysql sql 中如果使用了 not in , not exists , ( 不等于 !=) 这些不⾛ < 小于 > ⼤于 = 这个根据实际查询数据来判断,如果全盘扫描速度比索引速度要快则不⾛索引 。

3.对索引应用内部函数,这种情况下应该建立基于函数的索引。

select * from template t where ROUND(t.logicdb_id) = 1

此时应该建ROUND(t.logicdb_id)为索引。

4、类型错误,如字段类型为varchar,where条件用number。

例:template_id字段是varchar类型。

错误写法:select * from template t where t.template_id = 1

正确写法:select * from template t where t.template_id = ‘1’

5.如果MySQL预计使用全表扫描要比使用索引快,则不使用索引

6.like的模糊查询以%开头,索引失效

7.索引列没有限制 not null,索引不存储空值,如果不限制索引列是 not null,oracle会认为索引列有可能存在空值,所以不会按照索引计算

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
常见索引失效的情况
GeekLiHua
2024/08/30
1160
mysql 联合索引生效的条件、索引失效的条件
对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分。例如索引是key index (a,b,c)。 可以支持a | a,b| a,b,c 3种组合进行查找,但不支持 b,c进行查找 .当最左侧字段是常量引用时,索引就十分有效。
全栈程序员站长
2022/07/18
3.7K0
mysql 联合索引生效的条件、索引失效的条件
Mysql优化-索引
单一索引是指索引列为一列的情况,即新建索引的语句只实施在一列上; 用户可以在多个列上建立索引,这种索引叫做复合索引(组合索引);
码客说
2019/10/21
1.3K0
MYSQL用法(八) 索引失效的各种情况小结
   如:select * from test where id-1=9;//错误的写法
Java架构师必看
2021/05/27
1.7K0
mysql索引优化详解
文章目录 1. Explain 1.1. id 1.1.1. id相同 1.1.2. id不同 1.2. table 2. 索引优化 2.1. 全值匹配 2.2. 最佳左前缀法则 2.3. 不在索引上列上做任何操作 2.4. 不能使用索引中范围条件右边的列(范围之后的索引全失效) 2.5. 使用覆盖索引,少使用select* 2.6. mysql在使用不等于(!=或者<>)的时候无法使用导致全表扫描 2.7. 在使用or的时候,前后两个都是索引的时候才会生效 2.8. is null和is not nu
爱撒谎的男孩
2019/12/31
1.4K0
MySQL DBA基本知识点梳理和查询优化
本文主要是总结了工作中一些常用的操作,以及不合理的操作,在对慢查询进行优化时收集的一些有用的资料和信息,本文适合有MySQL基础的开发人员。
数据和云
2019/05/14
8760
京东三面:什么情况会导致 MySQL 索引失效?
为了验证 MySQL 中哪些情况下会导致索引失效,我们可以借助 explain 执行计划来分析索引失效的具体场景。
Java程序猿
2022/07/29
6100
Mysql进阶优化篇02——索引失效的10种情况及原理
上一篇mysql进阶优化篇,我们介绍了数据库的性能分析工具,知道了怎么发现数据库的性能问题,这一篇博客我们将介绍索引失效的10种情况及原理
半旧518
2022/10/26
1.2K0
Mysql进阶优化篇02——索引失效的10种情况及原理
真正线上索引失效的问题是如何排查的
针对索引失效的排查,关键步骤包括确定需要分析的SQL语句,并通过EXPLAIN查看其执行计划。主要关注type、key和extra这几个字段。
@派大星
2024/03/20
1910
真正线上索引失效的问题是如何排查的
MySQL进阶笔记-4(索引的使用)
如果索引了多列,要遵守最左前缀法则。指的是查询从索引的最左前列开始,并且不跳过索引中的列。
千羽
2021/12/29
3290
MySQL进阶笔记-4(索引的使用)
mysql基本知识点梳理和查询优化
本文主要是总结了工作中一些常用的操作,以及不合理的操作,在对慢查询进行优化时收集的一些有用的资料和信息,本文适合有mysql基础的开发人员
周三不加班
2019/09/03
6520
mysql基本知识点梳理和查询优化
谈谈MYSQL索引失效场景
MYSQL中索引是经常用来对数据库查询性能优化的方式,再MySQL中采用了B+树作为索引结构来减少磁盘IO次数去提高数据的检索性能。但是在某些场景下,由于查询语句设计不合理,或者对MySQL的理解不够深入。索引有可能会失效,变为全表扫描,这对于大数据量的查询是非常低效的。今天我们就来聊聊这些常见的失效场景。
一个风轻云淡
2023/11/30
4390
mysql基本知识点梳理和查询优化
本文主要总结了工作中一些常用的操作及不合理的操作,在对慢查询进行优化时收集的一些有用的资料和信息,本文适合有MySQL基础的开发人员。
lyb-geek
2018/12/26
6120
索引失效案例
使用复合索引,需要遵循最佳左前缀法则,即如果索引了多列,要遵守最左前缀法则。指的是查询从索引的最左前列开始并且不跳过索引中的列。
一个风轻云淡
2022/11/15
8090
索引失效案例
我去,为什么最左前缀原则失效了?
最近,在 mysql 测试最左前缀原则,发现了匪夷所思的事情。根据最左前缀原则,本来应该索引失效,走全表扫描的,但是,却发现可以正常走索引。
烟雨星空
2020/06/16
1.3K0
10张图,搞懂索引为什么会失效?
在InnoDB存储引擎中,是以主键为索引来组织数据的。记录在页中按照主键从小到大的顺序以单链表的形式连接在一起。
Java识堂
2020/12/16
1.2K0
10张图,搞懂索引为什么会失效?
MYSQL 索引类型、什么情况下用不上索引、什么情况下不推荐使用索引
转载自 http://blog.csdn.net/kaka1121/article/details/53395628
allsmallpig
2021/02/25
6460
MySQL索引优化实战
众所周知,索引类似于字典的目录,可以提高查询的效率。 索引从物理上可以分为:聚集索引,非聚集索引 从逻辑上可以分为:普通索引,唯一索引,主键索引,联合索引,全文索引
Java识堂
2019/05/21
1.1K0
MySQL 索引创建和优化实践
本文以 employees 表为例子,结合具体的索引运用实践案例,通过分析 EXPLAIN 关键字获取执行计划,来验证我们这些索引实践。如果是执行计划相关的详细信息,大家可以参考 mysql 官网 explain 介绍。
没有故事的陈师傅
2021/11/12
1.7K0
MySQL 索引创建和优化实践
什么情况下设置了索引但无法使用?
在 MySQL 中,即使为某些列设置了索引,但在某些情况下,查询优化器可能仍然不会使用这些索引。以下是一些常见的导致索引无法被使用的情况:
代码小李
2024/12/30
1370
相关推荐
常见索引失效的情况
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档