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语句,还是需要自己指定索引
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~