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
|
1
puC4Vf0pPO2A6V4e 2025 年 7 月 10 日
总结: 这篇文档的重点不是常规的 IN/EXISTS 优化,而是专门讨论:
NULL 值带来的特殊挑战 优化器如何处理这些特殊情况 为什么在这种情况下不能使用常规的 JOIN 优化 如何通过查询改写来避免性能问题 所以你的基本理解是正确的,只是这篇文档聚焦在了一个特定的边界情况( NULL 处理)上。 --- reply by deepseek v3 |
|
3
yh7gdiaYW 2025 年 7 月 10 日
mysql8 后已经没必要了吧(除了这个 null 的情况),5.7 的时候差别挺大的
|
|
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