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

MySQL DBMS执行查询前是否会改写!=条件语句以利用索引?

结论

MySQL的查询优化器确实会在逻辑优化阶段对!=/<>这类不等值查询条件做等价改写,转换为<和>组合的范围查询条件,只要符合索引生效的前提,就能触发索引范围扫描。你示例中的两条查询在优化器处理后的逻辑执行树完全一致,所以explain结果均为range范围扫描,执行效率没有差异。

补充说明

  • 首先纠正广为流传的认知误区:!=一定不能走索引是错误结论,只要满足索引生效条件,优化器会自动处理不等值条件匹配索引。
  • 只有符合以下情况时,!=查询才不会走索引:
    • 不等值判断的字段没有创建对应索引
    • 字段上存在函数调用、隐式类型转换,导致索引失效
    • 优化器评估不等值条件的过滤性极低(通常符合条件的行占比超过表总数据量的20%~30%,不同版本阈值有差异),认为全表扫描成本低于索引扫描,主动放弃使用索引
  • 实际开发中不需要手动把!=改写成<+>的组合,优化器会自动做等价转换,两种写法的执行效率没有区别。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 22:45:07