You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL带WHERE子句时MAX函数与ORDER BY LIMIT 1性能差异原因

性能差异的根本原因

二者执行时选择的索引和执行逻辑完全不同,直接导致了上千倍的性能差距:

  • ORDER BY id DESC LIMIT 1的执行逻辑:
    优化器选择了主键id的倒序索引扫描,从最大的id开始逐行校验open_time > 0的过滤条件,只要找到第一条符合条件的记录就直接终止查询返回结果。你的场景中open_time > 0是非常宽松的过滤条件,几乎所有行都满足,所以扫描第一条就命中,实际只扫描了1行数据,耗时极短。
  • MAX(id)的执行逻辑:
    优化器默认优先匹配WHERE子句对应的索引,选择了open_time的唯一索引,先做范围扫描取出所有满足open_time > 0的218万条记录,再对这些全量符合条件的记录做聚合计算求取最大id,全量扫描的成本极高,所以耗时长达1秒以上。
优化方案

如果需要MAX()写法也达到相近的性能,可以创建(open_time, id)的联合索引,优化器可以直接从联合索引的排序结构中定位到满足open_time > 0的最大id,不需要扫描全量符合条件的记录。

内容的提问来源于stack exchange,提问作者prupru

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 15:27:03