xhwdt
V2EX  ›  MySQL

使用 EXISTS 优化 IN 子查询

By xhwdt at 2025 年 7 月 10 日 · 3073 次点击

mysql8 IN 和 EXISTS 子查询会自动转化为 join 或者 semi-join ,为什么 IN 查询还需要 EXISTS 策略优化? 除了有聚合 HAVING 这个不能转 join 的确实用 EXISTS 比较好,其他的好像优化器转化后用 show warnings 看 IN 和 EXISTS 语句是一样的。那这篇到底在讲啥? https://dev.mysql.com/doc/refman/8.0/en/subquery-optimization-with-exists.html ,还是说我理解错了。

5 条回复    2025-07-11 10:03:12 +08:00
puC4Vf0pPO2A6V4e
   1
puC4Vf0pPO2A6V4e  
   2025 年 7 月 10 日
总结: 这篇文档的重点不是常规的 IN/EXISTS 优化,而是专门讨论:
NULL 值带来的特殊挑战
优化器如何处理这些特殊情况
为什么在这种情况下不能使用常规的 JOIN 优化
如何通过查询改写来避免性能问题
所以你的基本理解是正确的,只是这篇文档聚焦在了一个特定的边界情况( NULL 处理)上。
---
reply by deepseek v3
catamaran
   2
catamaran  
   2025 年 7 月 10 日   ❤️ 1
@hushulin 没人举报之前赶紧删了,小心封号
yh7gdiaYW
   3
yh7gdiaYW  
   2025 年 7 月 10 日
mysql8 后已经没必要了吧(除了这个 null 的情况),5.7 的时候差别挺大的
namenone
   4
namenone  
   2025 年 7 月 10 日
@catamaran
@hushulin 马上 AI 警察闻着味就来了~
puC4Vf0pPO2A6V4e
   5
puC4Vf0pPO2A6V4e  
   2025 年 7 月 11 日
没有删除按钮,我注明是 AI 回复了
MySQL 5.5 Community Server
MySQL 5.6 Community Server
Percona Configuration Wizard
XtraBackup 搭建主从复制
Great Sites on MySQL
Percona
MySQL Performance Blog
Severalnines
推荐管理工具
Sequel Pro
phpMyAdmin
推荐书目
MySQL Cookbook
MySQL 相关项目
MariaDB
Drizzle
参考文档
http://mysql-python.sourceforge.net/MySQLdb.html
© 2026 V2EX · 25ms · 3.9.8.5