mysql索引左侧原则,你真的了解吗?

2023-11-11

前言

写这篇文章源自一位杠精同事提了个问题,左侧原则跟where条件顺序有无关系?我想了想,好像是有关系的!不敢确定,但是自己又懒得动手测试,于是发起ETC自动抬杠功能,强行杠了一拨,结果杠输了,接下来即是动手验证…

预习执行计划

在这里插入图片描述
在这里插入图片描述

实践

咱们先申明前置条件,创建表如下:
在这里插入图片描述

创建复合索引如下注意哦,索引使用的BTree:

在这里插入图片描述
我们先来一个提问,看如下两条sql,我们花5秒时间思考下,会走索引吗?

  • sql-1 根据code查询:
    在这里插入图片描述

  • sql-2 根据name查询:
    在这里插入图片描述

  • 5

  •   4
    
  •           3
    
  •                   2
    
  •                            1
    

时间到,咱们看下实际结果.

  • sql-1 执行计划:
    在这里插入图片描述

  • sql-2 执行计划:
    在这里插入图片描述

怎麽~样,是否跟你们想象的一样呢?我们继续验证查询条件的顺序是否影响sql的执行计划. 为了方便截图,以下我主要使用SecureCRT查询.
在这里插入图片描述

我们列举以上五条sql来验证,查询结果如下:
在这里插入图片描述

从上图很明显可以看出,where条件的顺序完全不影响索引的执行,但是很明显上面5条sql所有查询条件都是包含在复合索引内,那要是有查询条件不在符合索引内又是什么结果呢,我们列举4条sql继续求证…

在这里插入图片描述
在这里插入图片描述

这里发现不一样了,我们的复合索引顺序是name,code,createTime.

当出现非索引字段的查询条件时,只有包含了name的查询条件走了索引.这是为什么呢?

原来是因为我们用了B+树索引数据结构,它是按照从左到右的顺序建立索引,同时mysql查询优化器会优化sql语句,不管where条件顺序如何变化,都会按照索引左侧原则去优化(注意咯是按照索引的左侧,不是where条件的左侧条件哦),以效率最高的方式去执行sql.

好了,到了这里,问题已经解决.不知道童鞋们有没有疑问,上面我们一直说的是BTree索引数据结构,假如是hash结构呢?结果又会是怎样?哈哈哈,不用猜啦,我全部都试过一遍,结果与上面完全一致!

似乎我的分享也该结束了!不,我要加班!哦不对!我热爱学习,热爱加班!继续整理干货!

总结

对于复合索引 idx_A_B_C

有A、A and B、B and A、C and A、A and C、A and B and C、B and A and C、C and B and A 会走索引.

注意: or 不走索引 C and B or A 或者 A and B or C 或者 A and (B or C) 不走索引.

喜欢的话记得点个赞或者加个关注

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mysql索引左侧原则,你真的了解吗? 的相关文章

随机推荐

  • 【华为OD机试】数字最低位排序【2023 B卷

    华为OD机试 真题 点这里 华为OD机试 真题考点分类 点这里 题目描述 给定一个非空数组 列表 起元素数据类型为整型 请按照数组元素十进制最低位从小到大进行排序 十进制最低位相同的元素 相对位置保持不变 当数组元素为负值时 十进制最低为等
  • 集合引用类型 下

    目录 Map Map set Map get Map delete Map has Map values Map entries Map clear 选择Object 还是Map 数据转换 转为数组 转为 JSON 对象转为 Map 数组转
  • 【Matlab】系统的响应分析

    前言 一个信号系统课程中使用Matlab对系统的零状态响应 零输入响应 完全响应 冲激响应 阶跃响应求解 波形生成以及分析的实验 一 内容 设系统的微分方程为 激励为 起始状态条件为 可求得 零输入响应 零状态响应 完全响应 冲激响应 阶跃
  • 攻防世界web新手题解题writeup

    攻防世界web新手题 1 view source 题目描述 X老师让小宁同学查看一个网页的源代码 但小宁同学发现鼠标右键好像不管用了 题目场景 http 220 249 52 133 58537初级题 按下F12查看网页源码得到flag 2
  • vue自定义指令实现复制功能

    思路 使用浏览器自带的execCommand使用Copy 但此方法只能是被选中的值才能进行复制粘贴 动态创建一个文本域 将拿到的文字放在文本域中 然后自动选中 再调用浏览器方法即可 提示 想要选中文本框的内容 有如下两个方法可以 方法一 通
  • 用python画一束满天星花朵,python满天星绘制流程图

    大家好 小编来为大家解答以下问题 用python画一束满天星花朵 python满天星绘制流程图 今天让我们一起来看看吧 1 用python画一百个同心圆的代码 import matplotlib pyplot as plt from mat
  • u盘文件删除如何恢复呢?

    相信很多上班族都有自己的u盘 u盘是用来储存一些我们可以随身携带的数据的 无论是学习还是工作 只要用电脑 都需要使用u盘 而u盘就是一个小容器 可以装一些重要的文件 方便我们随身携带 当u盘里的文件在使用u盘的过程中不小心被删除了 怎么恢复
  • selenium的安装及使用介绍

    R爬虫之上市公司公告批量下载 selenium的安装及使用介绍 http yphuang github io blog 2016 03 01 Get Listed Company Announcement
  • 【超简单】使用TensorFlow训练和部署图像分类模型

    一 简介 使用TensorFlow和OpenCV实现图像分类 按照流程图运行程序 可以非常简便地完成图像预处理 生成数据集 训练模型和部署模型 四个程序的功能如下 preprocess py 对图像进行重命名和调整大小 建议拍摄形状为正方形
  • 数据流图学习

    数据流图或数据流程图 Data Flow Diagram 缩写为DFD 是什么 数据流图是结构化分析方法中使用的工具 它以图形的方式描绘数据在系统中流动和处理的过程 由于它只反映系统必须完成的逻辑功能 所以它是一种功能模型 标志了一个系统的
  • JavaScript中apply()和call()的区别和应用

    JavaScript中的每一个Function对象都有一个apply 方法和一个call 方法 这两个方法能够改变函数体内部 this 的指向 例如 fun1 call 或者fun1 apply 都是为了改变fun1函数内部的this指向
  • Java 实现 AES 对称加密算法的加解密

    Java 实现 AES 对称加密算法的加解密 前言 一 对称加密算法简介 1 对称加密 2 加密模式 3 填充模式 二 AES 加解密代码实例 1 生成 AES 密钥 2 AES 加解密 3 AES nonce 加解密 前言 文章字数比较多
  • uniapp 里折叠面板嵌套 uni-collapse 高度不能自适应解决办法

  • python:根据一个列表对另外一个列表排序

    在使用python处理数据时可能会遇到根据列表A对列表B进行排序的问题 记录一下想到的两个方法 方法1 根据列表b中每个元素的下标来获取列表a中对应位置的元素 将其作为排序依据即可 import random a x for x in ra
  • JVM你知道多少?

    1 jvm的内存结构 方法区和堆是所有线程共享的内存区域 而java栈 本地方法栈和程序计数器是运行时线程私有的内存区域 1 Java堆 Heap 是Java虚拟机所管理的内存中最大的一块 Java堆是被所有线程共享的一块内存区域 在虚拟机
  • naive bayes java_Naive Bayes 朴素贝叶斯的JAVA代码实现

    最进写毕业论文找了下贝页斯的资料 这个文章讲的很好 转载下 链接http blog csdn net michael kong nju article details 12623557 comments 1 关于贝叶斯分类 bayes 是一
  • STM32—ADC详解入门(ADC读取烟雾传感器的值)

    目录 一 ADC是什么 二 ADC的性能指标 三 ADC特性 四 ADC通道 五 ADC转换顺序 六 ADC触发方式 七 ADC转化时间 八 ADC转化模式 九 实验 使用ADC读取烟雾传感器的值 1 配置 2 代码 一 ADC是什么 AD
  • MSYS2更换国内源

    今天安装了Msys64 但是Msys64使用的国外源实在太慢 必须更新为国内源 目前测试过国内最快是清华大学的源 我的安装路径为d msys64 为什么要安装在D盘 因为msys64需要不断更新数据和安装自己的软件 也就是说会占用越来越多的
  • 使用mnist数据集实现手写字体的识别

    1 MNIST是一个入门级的计算机视觉数据集 它包含各种手写数字图片 它也包含每一张图片对应的标签 告诉我们这个是数字几 该数据集包括60000行的训练数据集 mnist train 和10000行的测试数据集 mnist test 每一张
  • mysql索引左侧原则,你真的了解吗?

    前言 写这篇文章源自一位杠精同事提了个问题 左侧原则跟where条件顺序有无关系 我想了想 好像是有关系的 不敢确定 但是自己又懒得动手测试 于是发起ETC自动抬杠功能 强行杠了一拨 结果杠输了 接下来即是动手验证 预习执行计划 实践 咱们