V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
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
xhwdt
V2EX  ›  MySQL

使用 EXISTS 优化 IN 子查询

  •  
  •   xhwdt · 55 天前 · 1756 次点击
    这是一个创建于 55 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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
    hushulin
        1
    hushulin  
       55 天前
    总结: 这篇文档的重点不是常规的 IN/EXISTS 优化,而是专门讨论:
    NULL 值带来的特殊挑战
    优化器如何处理这些特殊情况
    为什么在这种情况下不能使用常规的 JOIN 优化
    如何通过查询改写来避免性能问题
    所以你的基本理解是正确的,只是这篇文档聚焦在了一个特定的边界情况( NULL 处理)上。
    ---
    reply by deepseek v3
    catamaran
        2
    catamaran  
       55 天前   ❤️ 1
    @hushulin 没人举报之前赶紧删了,小心封号
    yh7gdiaYW
        3
    yh7gdiaYW  
       55 天前
    mysql8 后已经没必要了吧(除了这个 null 的情况),5.7 的时候差别挺大的
    namenone
        4
    namenone  
       55 天前
    @catamaran
    @hushulin 马上 AI 警察闻着味就来了~
    hushulin
        5
    hushulin  
       55 天前
    没有删除按钮,我注明是 AI 回复了
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3364 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 04:55 · PVG 12:55 · LAX 21:55 · JFK 00:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.