广告
返回顶部
首页 > 资讯 > 数据库 >MySQL索引失效原理
  • 685
分享到

MySQL索引失效原理

2024-04-02 19:04:59 685人浏览 薄情痞子
摘要

目录1、索引失效原因2、再来看看哪些情况会破坏索引的有序性。 - 对索引字段做函数操作 - 隐式类型转换 - 隐式字符编码转换 3、总结 1、索引失效原因 首先看看哪些情况下,将会导

1、索引失效原因

首先看看哪些情况下,将会导致查找不能利用索引的有序性。

假设一个表test中有a,b,c,d四个字段,c是主键。

在a,b字段上建立联合索引(a,b):CREATE index idx_a_b on test(a,b); B+树联合索引.JPG

可以得到的规律是:优先按a字段从小到大排序,a字段相等的按b字段从小到大排序;

分析以下情况,索引是否会失效以及失效的原因:

条件只包含b字段


select * from test where  b=2;

索引失效:

显然,走的时候全文扫描,并没有使用索引。因为只看b字段的索引,是2,4,1,3,4,5,并不能利用索引的有序性快速定位。

对a字段范围查询:


select * from test where  a>1 and b=2;


索引失效:

可以看到,索引并没有完全失效,而是先利用索引定位到a的位置。因为这里的key_len是4,而联合索引的key_len是8。

对a字段等值查询,b字段范围查询:

索引失效:

可以看到是using index并且key_len是8,也就是两个字段的索引都用到了,这也对应着联合索引排列的规律:a字段相同的情况下,b字段有序排列。

以上几种情况可以总结为:不符合最左前缀匹配原则导致索引失效。

最左匹配前缀保证可以利用到索引排序的有序性,而把等值查询放在前面,范围查询放在后面,是利用了[前缀字段相等的情况下,后面的索引字段有序]这个特性,是特殊意义下的最左前缀匹配原则。

2、再来看看哪些情况会破坏索引的有序性。

- 对索引字段做函数操作

对索引字段做函数操作,比如y=f(x),并不能保证得到的y的值依然是有序的,在这种弄个情况下,优化器会放弃树的搜索功能,但是不排除优化器在发现该索引树比主键索引小很多的情况下,选择扫描这个索引。

- 隐式类型转换

Mysql 中,字符串和数字做比较的话,是将字符串转换成数字。隐式类型转换的本质是对索引字段使用了CAST()函数,原理同上。

- 隐式字符编码转换

字符串编码转换的本质是使用了CONVERT() 函数。

3、总结

索引失效的原因是优化器发现不能利用索引的有序性,因此在使用索引时,要尽量满足最左前缀匹配原则、范围查询放在最后、不使用%like %like%等模糊查询,就是在最大程度利用索引的有序性;但是在某些情况下,优化器只是放弃索引树的搜索功能,可能还是会选择扫描这个索引。

到此这篇关于mysql索引失效原理的文章就介绍到这了,更多相关Mysql索引失效内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

您可能感兴趣的文档:

--结束END--

本文标题: MySQL索引失效原理

本文链接: https://www.lsjlt.com/news/159717.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MySQL索引失效原理
    目录1、索引失效原因2、再来看看哪些情况会破坏索引的有序性。 - 对索引字段做函数操作 - 隐式类型转换 - 隐式字符编码转换 3、总结 1、索引失效原因 首先看看哪些情况下,将会导...
    99+
    2022-11-12
  • mysql索引失效的原因
    小编给大家分享一下mysql索引失效的原因,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!索引对于MySQL而言,是非常重要的篇章。索引知识点也巨多,要想掌握透彻,需要逐个知识点一一击破,今天来...
    99+
    2022-10-18
  • MySQL索引失效的原理是什么
    这篇文章主要讲解了“MySQL索引失效的原理是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL索引失效的原理是什么”吧!1、索引失效原因首先看看哪些情况下,将会导致查找不能利用索...
    99+
    2023-06-25
  • mysql索引失效
    一、索引失效 当or左右查询字段只有一个是索引,该索引失效,只有当or左右查询字段均为索引时,才会生效 使用order by对数据库进行查询时,导致索引失效 ,order by走全表扫描比回表的时间更少 主键和唯一索引在同一列时,会导致索引...
    99+
    2023-09-06
    mysql 数据库
  • MySQL索引失效有哪些原因
    MySQL索引失效有哪些原因,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。单个索引1、使用!= 或者 <> 导致索引失效SELEC...
    99+
    2022-10-18
  • oracle 索引失效原因
    查询结果集超过大表的30%会导致索引失效,因为orcale优化器认为既然已经查询了该表的30%以上的数据,那还不如全表扫描。 SQL查询条件包含如下条件: not in not exists != name like ‘%张‘  or...
    99+
    2021-11-21
    oracle 索引失效原因 数据库入门 数据库基础教程 数据库 mysql
  • mysql in索引失效的原因是什么
    这篇“mysql in索引失效的原因是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“m...
    99+
    2023-05-25
    mysql
  • 索引失效底层原理是什么
    这篇文章主要讲解了“索引失效底层原理是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“索引失效底层原理是什么”吧!单值索引B+树图单值索引在B+树的结构里...
    99+
    2022-10-18
  • MySQL 索引失效详解
    MySQL 索引失效详解 一、MySQL索引失效原因汇总 隐式的类型转换,索引失效查询条件包含or,可能导致索引失效like通配符可能导致索引失效查询条件不满足联合索引的最左匹配原则在索引列上使用my...
    99+
    2023-09-08
    mysql 数据库 sql
  • mysql索引失效的常见原因有哪些
    本篇内容介绍了“mysql索引失效的常见原因有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前言:MySQL中提高性能的一个最有效的方式...
    99+
    2023-06-30
  • 索引失效的7个原因
    索引失效的7个原因 概述1. 最左匹配原则2. 使用函数3. 计算操作4. Like %5. 使用Or导致索引失效6. in使用不当7. order By8. 总结9. 补充 SELECT *...
    99+
    2023-09-23
    mysql java 数据库
  • Mysql索引失效的情况
    前提:建立了一个employee表,同时建立了一个组合索引lastName,gender 。   最常说的like匹配                             例1 explain select * fr...
    99+
    2016-01-15
    Mysql索引失效的情况
  • MySQL索引失效原因及SQL查询语句不走索引原因是什么
    这篇“MySQL索引失效原因及SQL查询语句不走索引原因是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我...
    99+
    2023-03-07
    mysql sql
  • MySQL索引失效原因以及SQL查询语句不走索引原因详解
    目录前言1. 隐式的类型转换,索引失效2. 查询条件包含 or,可能导致索引失效3. like 通配符可能导致索引失效4. 查询条件不满足联合索引的最左匹配原则5. 在索引列login_time上使用 mysql 的内置...
    99+
    2023-03-06
    mysql索引在什么时候失效 mysql 索引失效 mysql索引失效怎么办
  • MySQL索引原理
    定义 索引(Index)是帮助MySQL高效获取数据的数据结构。那么什么数据结构可以用来高效的获取数据呢? 查看索引 mysql> show index from user; +-------+------------+----------...
    99+
    2020-02-14
    MySQL索引原理
  • mysql中出现索引失效的原因是什么
    这篇文章将为大家详细讲解有关mysql中出现索引失效的原因是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。最佳左前缀原则——如果索引了多列,要遵守最左前缀原则。指的是查询要从索引的最左前...
    99+
    2023-06-08
  • 索引失效的原因是什么
    本篇内容主要讲解“索引失效的原因是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“索引失效的原因是什么”吧!MySQL数据是如何存储的聚集索引我们先建如下的一...
    99+
    2022-10-18
  • mysql索引为什么会失效
    这篇文章主要介绍了mysql索引为什么会失效,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。mysql索引失效的几种情况:1、条件中有or,即使其...
    99+
    2022-10-18
  • mysql如何判断索引失效
    在mysql中判断索引是否失效的方法:1.命令行启动mysql服务;2.登录mysql;3.选择数据库;4.执行“explain select surname,first_name form a,b where a.id...
    99+
    2022-10-21
  • Mysql进阶优化篇02——索引失效的10种情况及原理
    前 言 🍉 作者简介:半旧518,长跑型选手,立志坚持写10年博客,专注于java后端 🍌 专栏简介:mysql基础、进阶,主要讲解mysql数据库sql刷题、进...
    99+
    2023-08-31
    mysql 大数据 索引 数据库 sql调优
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作