使用 EXISTS 优化 IN 子查询

58 天前
 xhwdt

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 ,还是说我理解错了。

1775 次点击
所在节点    MySQL
5 条回复
hushulin
58 天前
总结: 这篇文档的重点不是常规的 IN/EXISTS 优化,而是专门讨论:
NULL 值带来的特殊挑战
优化器如何处理这些特殊情况
为什么在这种情况下不能使用常规的 JOIN 优化
如何通过查询改写来避免性能问题
所以你的基本理解是正确的,只是这篇文档聚焦在了一个特定的边界情况( NULL 处理)上。
---
reply by deepseek v3
catamaran
58 天前
@hushulin 没人举报之前赶紧删了,小心封号
yh7gdiaYW
58 天前
mysql8 后已经没必要了吧(除了这个 null 的情况),5.7 的时候差别挺大的
namenone
58 天前
@catamaran
@hushulin 马上 AI 警察闻着味就来了~
hushulin
57 天前
没有删除按钮,我注明是 AI 回复了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1144270

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX