Skip to content

面试速答(先看这里)

**一句话结论:**其实是没啥影响的, 也就是说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)的联合索引的。