主题
面试速答(先看这里)
**一句话结论:**其实是没啥影响的, 也就是说WHERE 子句后面多个字段的先后顺序通常不会影响查询的结果 。
60秒标准回答:
假如有一个联合索引,(a,b),那么如下两个SQL的性能有差别么?
其实是没啥影响的, 也就是说WHERE 子句后面多个字段的先后顺序通常不会影响查询的结果 。MySQL查询的WHERE子句只是用来过滤满足指定条件的行,而不涉及字段之间的顺序
因为有查询优化器的存在,字段的先后顺序并不重要,不信的话可以explain看一下上面两个SQL的执行计划,都是可以命中(a,b)的联合索引的
**答题顺序:**结论 → 原理/机制 → 关键流程 → 场景与取舍 → 易错点
回答主线:
- **要点1:**假如有一个联合索引,(a,b),那么如下两个SQL的性能有差别么?
- **要点2:**因为有查询优化器的存在,字段的先后顺序并不重要,不信的话可以explain看一下上面两个SQL的执行计划,都是可以命中(a,b)的联合索引的。
**记忆锚点:**WHERE → SQL → explain → where → MySQL → 的联合索引
关键取舍:
- 假如有一个联合索引,(a,b),那么如下两个SQL的性能有差别么?
加分表达:
- 因为有查询优化器的存在,字段的先后顺序并不重要,不信的话可以explain看一下上面两个SQL的执行计划,都是可以命中(a,b)的联合索引的。
追问准备:
- 围绕「WHERE」:底层原理是什么?使用时有哪些边界和常见坑?
- 围绕「SQL」:底层原理是什么?使用时有哪些边界和常见坑?
- 围绕「explain」:底层原理是什么?使用时有哪些边界和常见坑?
- 如果线上出现异常,你会如何定位、验证并规避?
典型回答
假如有一个联合索引,(a,b),那么如下两个SQL的性能有差别么?
java
SELECT * FROM my_table WHERE a = 'value' AND b = 'value2';
SELECT * FROM my_table WHERE b = 'value2' AND a = 'value';其实是没啥影响的,也就是说WHERE 子句后面多个字段的先后顺序通常不会影响查询的结果。MySQL查询的WHERE子句只是用来过滤满足指定条件的行,而不涉及字段之间的顺序。
因为有查询优化器的存在,字段的先后顺序并不重要,不信的话可以explain看一下上面两个SQL的执行计划,都是可以命中(a,b)的联合索引的。