MySQL-in与exists
2026年10月16日·Admin·2 次浏览
MySQL IN 和 EXISTS 区别
语义
IN:值是否在集合/子查询结果中。EXISTS:子查询是否至少返回一行(常写EXISTS (SELECT 1 ...))。
执行特点(经验法则,以优化器为准)
| 场景 | 常见选择 |
|---|---|
| 子查询结果集很小,外表大 | IN 有时更优(半连接优化) |
| 外表很大,子查询可走索引且短路 | EXISTS 常更合适(找到一行即停) |
MySQL 5.6+ 对 半连接、物化 等有多项优化,务必
EXPLAIN,不要死记。
NOT IN 与 NOT EXISTS
NOT IN:注意子查询结果含 NULL 时,整体可能全为未知/假,易踩坑。NOT EXISTS:一般更稳妥表达「不存在满足条件的行」。
小结
优先保证关联列有索引;NOT IN 注意 NULL;最终看 执行计划。