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

 更新时间:2021年11月18日 15:58:21   作者:风幕浦  
sql查询用到索引的条件是必须要遵守最左前缀原则,本文就详细的介绍了MySQL数据库索引的最左匹配原则,感兴趣的可以了解一下

一. 联合索引说明

建立三个字段的联合索引

联合索引(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数据库索引的最左匹配原则的文章就介绍到这了,更多相关MySQL 索引最左匹配 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MySQL间隙锁解决幻读问题

    MySQL间隙锁解决幻读问题

    本文主要介绍了MySQL间隙锁解决幻读问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • MySQL 常见时间字段设置小结

    MySQL 常见时间字段设置小结

    本文详细探讨了MySQL中常见时间字段的设置和处理,包括DATETIME、DATE、TIME和TIMESTAMP等类型的介绍,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-11-11
  • Mysql表的简单操作(基本技能)

    Mysql表的简单操作(基本技能)

    在数据库中,表的操作主要包括表的创建、查看、修改、删除等,了解如何操作这些表是数据库管理和开发的基本技能,本文给大家介绍Mysql表的简单操作,感兴趣的朋友一起看看吧
    2025-04-04
  • 配置hive元数据到Mysql中的全过程记录

    配置hive元数据到Mysql中的全过程记录

    这篇文章主要给的大家介绍了关于配置hive元数据到Mysql中的全过程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • 详解 MySQL中count函数的正确使用方法

    详解 MySQL中count函数的正确使用方法

    这篇文章主要介绍了 MySQL中count函数的正确使用方法,帮助大家更好的理解和使用MySQL数据库,感兴趣的朋友可以了解下。
    2020-11-11
  • mysql服务器查询慢原因分析与解决方法小结

    mysql服务器查询慢原因分析与解决方法小结

    在开发的朋友特别是和mysql有接触的朋友会碰到有时mysql查询很慢,当然我指的是大数据量百万千万级了,不是几十条了,下面我们来看看解决查询慢的办法
    2012-04-04
  • MySQL子查询的使用详解下篇

    MySQL子查询的使用详解下篇

    子查询是在查询语句里面再嵌套一个查询,这是因为我们在提取数据的时候有很多不知道的数据产生了依赖关系。本文为大家总结了一下MySQL数据库子查询语法规则,感兴趣的可以了解一下
    2022-08-08
  • mysql数据库提权的三种方法

    mysql数据库提权的三种方法

    文介绍了MySQL数据库的三种提权方法:UDF提权、MOF提权和启动项提权,同时列出了一些常见数据库及其默认端口,下面就来介绍一下,感兴趣的可以了解一下
    2024-09-09
  • mysql的事务,隔离级别和锁用法实例分析

    mysql的事务,隔离级别和锁用法实例分析

    这篇文章主要介绍了mysql的事务,隔离级别和锁用法,结合实例形式分析了MySQL事务,隔离级别和锁相关原理、用法及操作注意事项,需要的朋友可以参考下
    2020-02-02
  • MySQL索引详细解析

    MySQL索引详细解析

    索引是有双面性的,合理的建立索引可以提高数据库的效率。但是如果没有合理的构建索引和使用索引,可能会导致索引失效或者影响数据库性能,这篇文章主要介绍了MySql索引原理与操作
    2022-10-10

最新评论