mysql order by limit 索引不命中问题

我有一个表,里面有2个字段,大概类似 UserID 和 Time 

我有个查询语句A: select * from table where UserID=?UserID order by Time desc limit 1;

因此设置了一个联合索引 UserID_Time

又因为有根据时间查询数据的需求 B:select * from table where Time>?Time

因此又单独设置了一个Time索引

结果就出现了一个诡异的事情

当我查询A时,mysql的索引优化器并不会选择UserID_Time,而是选择了Time索引,查询耗时39秒

当我强制其使用UserID_Time后,只需要0.004秒就查询出来了,很明显它未命中正确的索引

而且我还发现一个诡异的现象
当我把limit的数值变大后,它就用UserID_Time索引了
经过我不断的测试,我发现在limit 106时用Time索引,而limit 107时则用正确的ID_Time索引

 

貌似索引优化器不是很靠谱,当查询语句中有 where 条件,又有order by 的时候,它会优先使用order by的索引

因此不能太信任索引优化器,对于一些sql语句,还是需要自己指定索引

 

posted @   WmW  阅读(161)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示