首页 新闻 会员 周边

mysql为什么查询结果列对索引的影响大于查询条件列

0
悬赏园豆:20 [已解决问题] 解决于 2022-06-24 09:36

我一直以为我的where条件中有EndTime和SensorID,理论上就应该命中EndTime_SensorID联合索引,但是实际上,用到了EndTime_UserID索引。。。。
mysql为什么要这么设计啊

WmW的主页 WmW | 菜鸟二级 | 园豆:424
提问于:2022-06-23 11:36

感觉是数据有点少,如果多点的数据的话,应该是使用索引下推

一缕轻烟断乾坤 1年前
< >
分享
最佳答案
0

因为你的查询条件先是范围查询,而范围查询以后的索引失效,所以此处实际上,只有EndTime列是走了索引的(从type和key_len可以看出来),而EndTime列相关的索引有两个,又因为查询的字段里只有UserID和EndTime,正好覆盖到了EndTime_UserID这个索引,所以MySQL优化器认为走这个索引会更快,所以。。。

收获园豆:20
飒沓流星 | 小虾三级 |园豆:1099 | 2022-06-23 12:29

是只要type=range索引就会失效吗,但是如果我强制使用EndTime_SensorID索引,查询速度就会非常的快,和不强制天差地别,这索引优化器也太智障了吧

WmW | 园豆:424 (菜鸟二级) | 2022-06-23 14:59

@WmW:
也不绝对,具体还是以EXPLAIN为准。
毕竟不是人工智能,所以阿里版的MySQL拔掉了官方自带的优化器

飒沓流星 | 园豆:1099 (小虾三级) | 2022-06-23 17:53

@飒沓流星:明白了,谢谢

WmW | 园豆:424 (菜鸟二级) | 2022-06-24 09:36

@WmW:
客气,相互学习

MySQL 5.6之后新加了这个优化

飒沓流星 | 园豆:1099 (小虾三级) | 2022-06-24 09:44
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册