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

MySQL中简单WHERE条件是否优先于带前缀通配符的LIKE子句执行?

结论

MySQL会优先执行可命中索引的organization_id等值条件过滤,再对筛选后的结果集执行带前缀通配符的LIKE匹配,不会先执行全表通配符搜索。

原理说明

  • MySQL查询优化器的核心逻辑是优先选择成本最低的执行路径:可命中索引的等值过滤的IO成本、计算成本远低于全表扫描后做通配符匹配,因此会被优先执行。
  • 你给出的场景中,organization_id有对应的B+树索引,通过该索引可以快速定位到所有organization_id = 1的行,之后仅需要对这部分远小于全表规模的结果集,逐行校验name LIKE '%abc%'的条件即可,整体执行效率远高于全表扫描后再过滤。

执行计划佐证

从你提供的EXPLAIN执行计划可以验证这个逻辑:

  • 执行计划的key字段显示使用的是users_organization_id_foreign索引,而非全表扫描
  • type字段值为ref,代表走了索引的等值匹配查询
  • rows字段展示的预估扫描行数,就是organization_id = 1对应的预估数据量,远小于全表行数

补充说明

只有当查询没有任何可用索引时,MySQL才会走全表扫描,逐行同时校验所有WHERE条件。只要存在可命中的高效索引,优化器一定会优先通过索引过滤掉尽可能多的行,再对剩余数据执行其余无法用到索引的校验逻辑(包括全模糊LIKE匹配、字段计算等场景)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 01:27:00