mysql索引失效的五种情况

news2024/11/26 8:20:31

第一种 违反最左前缀法则

        这个是针对联合索引的。

        假设有个tb_seller表,现在给三个字段建立联合索引,建立的时候字段顺序不可随便设置,字段顺序: name, status, address。下图Seq_in_index对应的是联合索引顺序。

d2a3604c35af4997bd305bd31a0f2b2c.png判断索引失效用explain执行计划,不懂这个可以先看我另外一篇文章mysql定位慢查询以及分析原因-CSDN博客

最左前缀法则定义

如果索引了多列,要遵守最左前缀法则。指的是查询从索引的最左前列开始,并且不跳过索引中的列。匹配最左前缀法则,走索引:

现在如下图,根据最左前缀法则执行三个语句,来看看字段是否走索引。 解释一下key是实际用到的索引,key_len是索引占用的大小

        第一条执行语句根据name查询,发现走了索引,并且索引长度为303.

        第二条语句执行根据name和status查询,发现也走了索引,索引长度为309,证明name和status都走了索引。

        第三条语句根据name、status、address查询,索引长度为612,证明三个都走了索引。 

 960767bfcfd44204b6c511f54467a4b5.png

 现在不按照最左原则试试,看看索引情况。

        第一条语句根据status、address,直接跳过name,违反了最左原则中'最左前列开始'的条例。所以下面key为null,没走索引,那么查询就是全盘扫描,效率极低。

        第二条只查status,和上面一样违反了原则,直接不走索引。

d1d62dcdb2144587a2b6b93b90bbe5a7.png

 再来看一种情况,满足最左原则中'最左前列开始'的条例,但是中间跳过status,也就是违反’不跳过索引中的列‘这个条例。我们可以看到索引是走了的,但是索引长度是303。

7201141fab514b959cd0d1dfbb0fea27.png

下面也是303,证明只有name走了索引,而address没走索引,索引失效

21ad66442e294318b3d4f573cded6550.png

第二种  范围查询右边的列索引失效

        第一条查询是符合最左前缀原则,都走了索引,索引长度是612,作为正例,现在来看下一条。

        第二条查询status用到了范围查询,明显索引失效了部分,索引长度只有309.
 eb30b34e1d584e4cb4907c4aeded0206.png

 上图第二个查询语句和下面一样,就证明上图是是address索引失效了。

dceccf384ecb4eb2a495dd5894f252b9.png第三种  索引列上进行运算操作

        可以看到我们对name进行了substring运算,结构key为null,索引失效。

 aea7f7d329b84163bd99b9c88213153d.png第四种  字符串不加单引号,可能失效

对比下面两条语句,会发现第二条语句的status失效了。

         305e4fc48a6c4b49ac124bd7ac6ca6ff.png

原因:在查询时,没有对字符串加单引号,MySQL的查询优化器,会自动的进行类型转换,造成索引失效。也就是说类型转换才是索引失效的本质原因。任何类型转换都会导致索引失效。

第五种  模糊查询可能导致索引失效

        注意这个可能

        第一条、第二条查询语句name进行模糊查询,结果key为null,索引失效。

        但第三条却没有。
 

 348110cfd95443138e58428ce33e9b21.png

 结论: 以%开头的like模糊查询,索引失效。如果仅仅是尾部模糊匹配,索引不会失效。如果是头部模糊匹配,索引失效。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2247736.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

H3C OSPF 多区域实验

目录 前言 实验拓扑 实验需求 实验解析 路由器配置 测试 前言 此篇文章为 OSPF多区域试验,建议先食用OSPF单区域实验,理解实验原理 学习基本配置,再来使用此篇,效果更佳!(当然如果你已经了解原理与基…

算法 Java实现

一.查找算法 1.分块查找 二.排序算法 1.冒泡排序

优先算法 —— 双指针系列 - 快乐数

1. 快乐数 题目链接: 202. 快乐数 - 力扣(LeetCode)https://leetcode.cn/problems/happy-number/description/ 2. 题目解析 示例1: 示例2: 3. 算法原理 两种情况:我们可以把两种情况都看作为循环&#xff0…

【机器学习】——卷积与循环的交响曲:神经网络模型在现代科技中的协奏

🎼个人主页:【Y小夜】 😎作者简介:一位双非学校的大二学生,编程爱好者, 专注于基础和实战分享,欢迎私信咨询! 🎆入门专栏:🎇【MySQL&#xff0…

php 导出excel 一个单元格 多张图片

public function dumpData(){error_reporting(0); // 禁止错误信息输出ini_set(display_errors, 0); // 不显示错误$limit $this->request->post(limit, 20, intval);$offset $this->request->post(offset, 0, intval);$page floor($offset / $limit) 1 ;$wh…

几天游记啊

绿灯常亮,黄灯闪,就是没有上线状态 一 2024.11.24 青浦圆通信息中心:vsphere client IDC运维专员可能就这项技能稀缺 二 2024.11.25 1 字节服务器外包单位有孚网路 什么互联网交换中心 不了解的人还以为是国家火炬计划呢!实际…

【C++动态规划 子集状态压缩】2002. 两个回文子序列长度的最大乘积|1869

本文涉及知识点 C动态规划 位运算、状态压缩、枚举子集汇总 LeetCode2002. 两个回文子序列长度的最大乘积 给你一个字符串 s ,请你找到 s 中两个 不相交回文子序列 ,使得它们长度的 乘积最大 。两个子序列在原字符串中如果没有任何相同下标的字符&…

记录:从.Net程序的内存转储文件中提取内存数据过程

1.准备材料:xxx.dump转储文件,VS2022 2.提取过程 使用VS打开xxx.dump文件VS中点击 调试托管内存 按钮查找需要导出的变量,注:通过类型查找时基础变量类型跟原类型不一样,如string对应String,bool对应Bool…

Nacos学习文档

目录 1、Nacos是什么2、Nacos名词介绍3、Nacos中的data id是如何组装的?4、Nacos 融合 Spring Cloud,成为注册配置中心4.1、Maven依赖作用4.2、启动配置管理4.2.1、添加依赖4.2.2、在 bootstrap.yml(也支持properties格式) 中添加…

QT简易项目 数据库可视化界面 数据库编程SQLITE QT5.12.3环境 C++实现

案例需求&#xff1a; 完成数据库插入&#xff0c;删除&#xff0c;修改&#xff0c;查看操作。 分为 插入&#xff0c;删除&#xff0c;修改&#xff0c;查看&#xff0c;查询 几个模块。 代码&#xff1a; widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget…

【Linux学习】【Ubuntu入门】2-3 make工具和makefile引入

1.使用命令新建三个.c文件vi main.c&#xff0c;vi input.c&#xff0c;vi caclcu.c&#xff0c;两个.h文件vi input.h&#xff0c;vi caclcu.h 2.vi Makefile&#xff1a;新建Makefile文件&#xff0c;输入一下内容 注意&#xff1a;命令列表中每条命令前用TAB键&#xff0c;不…

Gazebo仿真实现无人机+Apriltag码动态跟踪

目录 演示 一、环境 二、配置 创建模型 首先相机创建 添加相机 Apriltag创建 地图添加apriltag码 Apriltag_ros配置 三、代码运行 四、问题 修改相机模型的参数 演示 一、环境 ROSgazebo配置 Px4Mavros Apriltag_ros编译 二、配置 在默认的mavros_posix_sitl.l…

H.265流媒体播放器EasyPlayer.js播放器提示MSE不支持H.265解码可能的原因

随着人工智能和机器学习技术的应用&#xff0c;流媒体播放器将变得更加智能&#xff0c;能够根据用户行为和偏好提供个性化的内容推荐。总体而言&#xff0c;流媒体播放器的未来发展将更加注重技术创新和用户互动&#xff0c;以适应不断变化的市场需求和技术进步。 提示MSE不支…

加菲工具 - 好用免费的在线工具集合

加菲工具 https://orcc.online AI 工具 集合了目前主流的&#xff0c;免费可用的ai工具 文档处理 pdf转word、office与pdf互转等等工具都有链接 图片图标 统计了好用免费的在线工具 编码解码 base64编码解码、url编码解码、md5计算、进制转换等等 其它 还有其他好用的…

【linux学习指南】初识Linux进程信号与使用

文章目录 &#x1f4dd;信号快速认识&#x1f4f6;⽣活⻆度的信号&#x1f4f6; 技术应⽤⻆度的信号&#x1f309; 前台进程&#xff08;键盘&#xff09;&#x1f309;⼀个系统函数 &#x1f4f6;信号概念&#x1f4f6;查看信号 &#x1f320; 信号处理&#x1f309; 忽略此信…

今天你学C++了吗?——C++中的类与对象(第二集)

♥♥♥~~~~~~欢迎光临知星小度博客空间~~~~~~♥♥♥ ♥♥♥零星地变得优秀~也能拼凑出星河~♥♥♥ ♥♥♥我们一起努力成为更好的自己~♥♥♥ ♥♥♥如果这一篇博客对你有帮助~别忘了点赞分享哦~♥♥♥ ♥♥♥如果有什么问题可以评论区留言或者私信我哦~♥♥♥ ✨✨✨✨✨✨ 个…

Anaconda3 2024 jupyter notebook 配置默认文件路径

我的版本如下&#xff1a; 第一步&#xff1a; 打开命令行anaconda prompt &#xff0c; 敲下面命令生成配置文件 jupyter notebook --generate-config 如下图&#xff1a; 修改配置jupyter_notebook_config.py 文件中搜索c.ServerApp.root_dir &#xff08; 对于 Anac…

【抓包专题】burpsuitProxifier小程序抓包

抓包系列文章 burpsuit&Proxifier&小程序抓包 抓包系列文章前言一、工具下载二、获取证书并安装到本地三、抓包测试 前言 抓包是进行渗透的第一步&#xff0c;包都抓不到&#xff0c;渗透就不要谈了&#xff0c;废话少说&#xff0c;开干 一、工具下载 Proxifier安装使…

springboot 异步 @Async 的日常使用及失效场景

文章目录 springboot 异步 Async 的日常使用引言一、Async 使用位置二、Async 使用三、注解 Async 失效的情况&#xff08;1&#xff09;调用同一个类中的异步方法&#xff08;内部调用&#xff09;&#xff08;2&#xff09;未使用 EnableAsync 注解&#xff08;3&#xff09;…

WebGIS技术汇总

WebGIS系统通常都围绕地图进行内容表达&#xff0c;但并不是有地图就一定是WebGIS&#xff0c;所以有必要讨论下基于Web的地图API分类及应用场景。 Web上的Map API主要分类如下几类&#xff1a; Charts&#xff1a;以D3.js&#xff0c;Echarts等为代表。LBS&#xff1a;以高德…