Mysql 组合索引最左原则的疑惑
如果test表有一个组合索引(a,b),执行如下两条语句。
explain select * from test where a=1 and b=1;
explain select * from test where b=1 and a=1;
执行结果显示这两条语句都用索引。根据最左原则,只有第一条使用索引,第二条不使用索引。不明白为什么,求解惑
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
题主列出的情况,mysql会优化where子句的条件顺序,让查询符合索引顺序。
更具体点,上面的sql属于交集查询(都是and),在mysql中会使用
Index Merge intersection algorithm
算法来调整条件子句顺序。更详细的解释参见官方文档。最左原则是指:mysql会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配,索引可以任意顺序,mysql的查询优化器会帮你优化成索引可以识别的形式,所以这两条都是会命中索引的