白狗子的博客

「天上浮云如白衣,斯须改变如苍狗。」——杜甫

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;最终看 执行计划。

© 2025 My Blog. Built with Nuxt.js v4