MySQL数据库索引的最左匹配原则

  • 一. 联合索引说明
  • 二. 那ac是否能用到索引呢?
  • 三. 思考
  • 四. 最左匹配原则的成因

一. 联合索引说明

  • 建立三个字段的联合索引
  • 联合索引(a,b,c)相当于建立了索引:(a),(a,b),(a,b,c)

二. 那ac是否能用到索引呢?

先给出结论:a可以命中联合索引(a,b,c),c无法命中,所以ac组合无法命中联合索引。

1.建立abc联合索引(province,city,district)

  • ac索引查询
SELECT * FROM user_address WHERE province = '广东'
AND district = '南雄市'

显示查询范围是ALL

2.直接建立ac两个字段得联合索引

SELECT * FROM user_address WHERE province = '广东'
AND district = '南雄市'

查询结果是ref走了索引,扫描的行数也从21行变成了13行

3.ab索引查询

查询范围为ref

结论

  • abc联合索引,ac中的c不能命中这三个字段的联合索引,a可以命中,所以possible_keys列会显示使用了联合索引

三. 思考

abc索引,acb会走索引吗?

  • 最左前缀匹配原则,mysql会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配
  • 比如a=3 and b=4 and c>5 and d=6如果建立(a,b,c,d)顺序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引则都可以用到,a,b,d的顺序可以任意调整。
  • =和in可以乱序,比如a=1 and b=2 and c=3建立(a,b,c)索引可以任意顺序,mysql的查询优化器会帮你优化成索引可以识别的形式

四. 最左匹配原则的成因

  • 因为联合索引,如:abc,联合索引可以理解为有序的且形成的基础是建立在a上的,从a上建立b,b上建立c,所以必须要按照顺序来
  • 可以简单理解为:先对a排序建立索引,再在a的基础上对b进行排序,再是c
  • 所以联合索引在遇到范围查询,后面的索引会失效。

MySQL数据库索引的最左匹配原则((a),(a,b),(a,b,c)都能用到索引,(a,c)呢?)相关推荐

  1. 联合索引的最左匹配原则的成因

    联合索引的最左匹配原则的成因 上面我们只看的是单一的索引,接下来咱们来看看联合索引,也就是回答第二个问题.联合索引的最左匹配原则的成因.什么是联合索引呢,就是由多列组成的索引了.那亦要了解其成因,那先 ...

  2. mysql组合索最左_MySQL组合索引和最左匹配原则

    可以看到该查询使用到了索引 EXPLAIN SELECT * FROM student WHERE id = 2 AND name = 'defghijk' and age = 8; 可以看到该查询使 ...

  3. MySQL索引之最左匹配原则

    简介 这篇文章的初衷是很多文章都告诉你最左匹配原则,却没有告诉你,实际场景下它到底是如何工作的,本文就是为了阐述清这个问题. 准备 为了方面后续的说明,我们首先建立一个如下的表(MySQL5.7),表 ...

  4. MySql 索引的最左匹配原则举例详解

    最左匹配原则 最左匹配原则就是指在联合索引中,如果你的 SQL 语句中用到了联合索引中的最左边的索引,那么这条 SQL 语句就可以利用这个联合索引去进行匹配. 例如某表现有索引(a,b,c),现在你有 ...

  5. 【实测版】联合索引,最左匹配原则,走?不走?

    本文基本基于Explain做分析,如果不太了解可以先移步下文(。・ω・。)ノ 了解MySQL的Explain,读这一篇够了( ̄∇ ̄)/ 开始✊✊✊ 建表 我们先创建一个表 CREATE TABLE ` ...

  6. Mysql数据库开发的36条原则

    2019独角兽企业重金招聘Python工程师标准>>> 前言 这些原则都是经历过实战总结而成 每一条原则背后都是血淋淋的教训 这些原则主要是针对数据库开发人员,在开发过程中务必注意 ...

  7. [转]Mysql数据库开发的36条原则

    前言 这些原则都是经历过实战总结而成 每一条原则背后都是血淋淋的教训 这些原则主要是针对数据库开发人员,在开发过程中务必注意 总是在灾难发生后,才想起容灾的重要性: 总是在吃过亏以后,才记得曾有人提醒 ...

  8. 深度解密Mysql数据库索引

    文章目录 深度理解Mysql数据库索引 Mysql索引的基本概念 索引分类 Mysql中索引的语法 创建索引 删除索引 查看表中的索引 查看查询语句使用索引的情况 索引的优缺点 优点 缺点 索引的实现 ...

  9. 【面试题笔记-Java】MySQL数据库、索引、MVCC等知识点(自己整理)

    MySQL 1.MySQL的索引 索引就是帮助MySQL高效获取数据排好序的数据结构 索引数据结构: 二叉树 红黑树 hash表 B树 1.单指索引一个索引只包含单个列,一个表可以有多个单列索引 2. ...

最新文章

  1. eBCC性能分析最佳实践(1) - 线上lstat, vfs_fstatat 开销高情景分析...
  2. python3.6执行pip3时 Unable to create process using ''
  3. iOS使用Charts框架绘制—柱形图
  4. thinkphp htmlspecialchars_decode
  5. 深度学习之眼睛状态识别混淆矩阵的绘制
  6. vue 移动端头像裁剪_使用vue-cropper裁剪正方形上传头像-阿里云开发者社区
  7. php日志文件过大,Windows服务器系统下Apache的error.log文件过大的解决办法
  8. java $表示什么_java – 变量名中$的含义是什么?
  9. PAT 1044. 火星数字
  10. Android BLE开发之Android手机与BLE终端通信
  11. ASP.NET MVC架构与实战系列之三:MVC控件解析
  12. 【模拟信号】基于matlab抑制载波双边带调幅信号产生+解调【含Matlab源码 985期】
  13. Android学习笔记五:基本视图组件:Button
  14. java限制输入字符长度_input限制输入长度
  15. 7-2 整数的因子 (10 分)
  16. 51单片机实战教程(四 延时程序)
  17. php tp 聚合数据接口,TP5结合聚合数据天气预报API查询天气
  18. AI_综述----图像分割综述
  19. Ubuntu Desktop LTS - 文件完整路径
  20. 如何查看路由器的宽带连接密码

热门文章

  1. php显示文件内容,PHP读取文件内容并输出显示
  2. MyBatis处理MySQL日期类型
  3. C# 使用 PerformanceCounter 获取 CPU 和 硬盘的使用率
  4. 用IDM怎么下载游戏解说视频
  5. Redis(六) 数据库和缓存的一致性问题
  6. 性能优化系列(三)内存性能优化
  7. 一个非常棒的 RTSP OVER HTTP
  8. 使用BeanCopier工具类拷贝JavaBean
  9. 微信小程序 ios 橡皮筋效果踩坑
  10. 添加页面不显示ks001这条字段,修改显示,查询都显示该字段