Code Bye

为什么在子查询里会使用索引?


根据最左前缀匹配原理,本人的子查询里没有需要查询first_name相关的数据,为什么会使用`first_name_last_name_4`这个索引查询呢?
解决方案

30

另外,一个问题就是你说的为什么你的子查询里都没有last_name和first_name字段,但是查询计划中会用到索引
这个问题的原因是mysql里的B树索引是基于主键的,也就是你的emp_no是主键,那么在你创建的last_name和first_name索引中,就会包含这个emp_no字段的值,而只包含这3个字段的索引,显然要比主键索引在体积上要小,所以你可以看到执行计划中type列里是index,也就是索引扫描,也就是把这个last_name和first_name 索引整个扫描了一遍,显然成本要比扫描整个表来的 要小。
所以,就会用这个看似完全没关系的索引了。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明为什么在子查询里会使用索引?