我一直以为我的where条件中有EndTime和SensorID,理论上就应该命中EndTime_SensorID联合索引,但是实际上,用到了EndTime_UserID索引。。。。
mysql为什么要这么设计啊
因为你的查询条件先是范围查询,而范围查询以后的索引失效,所以此处实际上,只有EndTime列是走了索引的(从type和key_len可以看出来),而EndTime列相关的索引有两个,又因为查询的字段里只有UserID和EndTime,正好覆盖到了EndTime_UserID这个索引,所以MySQL优化器认为走这个索引会更快,所以。。。
是只要type=range索引就会失效吗,但是如果我强制使用EndTime_SensorID索引,查询速度就会非常的快,和不强制天差地别,这索引优化器也太智障了吧
@WmW:
也不绝对,具体还是以EXPLAIN为准。
毕竟不是人工智能,所以阿里版的MySQL拔掉了官方自带的优化器
@飒沓流星:明白了,谢谢
@WmW:
客气,相互学习
MySQL 5.6之后新加了这个优化
感觉是数据有点少,如果多点的数据的话,应该是使用索引下推
– 一缕轻烟断乾坤 2年前