最左匹配问题

来源:5-25 【扩展与练习】关于 MySQL 索引的介绍及作业

qq_灬Mamba磊_0

2019-03-20

最左前缀匹配原则,非常重要的原则,mysql会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配,比如a = 1 and b = 2 and c > 3 and d = 4 如果建立(a,b,c,d)顺序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引则都可以用到,a,b,d的顺序可以任意调整;
后面不是太理解 建立了(a,b,d,c) 的索引 查询条件是a = 1 and b = 2 and c > 3 and d = 4 的时候 匹配索引的时候,先匹配到a 再匹配到b ,然后c>3 跳过, 再匹配到 d=4嘛 那这个c的索引还需要再回去匹配一次嘛 还是mysql自动优化了这个条件顺序 变成 a = 1 and b = 2 and d = 4 and c > 3 这个样子 匹配的 所以abdc的所以索引都能用到的,这个匹配的过程不是太理解

写回答

1回答

张勤一

2019-03-20

同学你好:

    我对你这里提出的问题作出一些拆解回答:

    1. a = 1 and b = 2 and c > 3 and d = 4 如果建立(a,b,c,d)顺序的索引,d是用不到索引的:这是因为其中的 c 列匹配使用了 >,根据 mysql 的规则,遇到 > 则会停止使用索引。所以,不会使用到 d 索引;

    2. a、b、d 的顺序之所以可以互换,是因为你在查询的时候,MySQL 的语法树会根据表中的索引对你的查询语句做优化,会按照你的索引顺序重排你的查询顺序。


    可以查一查 MySQL 的最左前缀匹配原则是什么意思,这里还涉及到联合索引相关的知识点。


    欢迎来 QQ 群随时交流、讨论,也非常感谢同学的支持!

1
1
qq_Beta猫_0
那 a = 1 and b = 2 and c > 3 and d = 4 (a,b,d,c)为什么可以用到全部索引呢?不是遇到 > 就停止匹配索引么。是因为mysql是按照(a b d c)顺序匹配,所以先是判断了 a b d的条件都是等于,最后c的条件是>所以用到了全部索引?
2019-09-01
共1条回复

Spring Cloud微服务架构 设计实现广告系统

广告营销系统,未来大中型企业的标配

2136 学习 · 927 问题

查看课程