› 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 · Jul 10, 2025 · 4700 views
    This topic created in 443 days ago, the information mentioned may be changed or developed.

    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 replies  •  2025-07-11 10:03:12 +08:00
    puC4Vf0pPO2A6V4e
        1
    puC4Vf0pPO2A6V4e  
       Jul 10, 2025
    总结: 这篇文档的重点不是常规的 IN/EXISTS 优化,而是专门讨论:
    NULL 值带来的特殊挑战
    优化器如何处理这些特殊情况
    为什么在这种情况下不能使用常规的 JOIN 优化
    如何通过查询改写来避免性能问题
    所以你的基本理解是正确的,只是这篇文档聚焦在了一个特定的边界情况( NULL 处理)上。
    ---
    reply by deepseek v3
    catamaran
        2
    catamaran  
       Jul 10, 2025   ❤️ 1
    @hushulin 没人举报之前赶紧删了,小心封号
    yh7gdiaYW
        3
    yh7gdiaYW  
       Jul 10, 2025
    mysql8 后已经没必要了吧(除了这个 null 的情况),5.7 的时候差别挺大的
    namenone
        4
    namenone  
       Jul 10, 2025
    @catamaran
    @hushulin 马上 AI 警察闻着味就来了~
    puC4Vf0pPO2A6V4e
        5
    puC4Vf0pPO2A6V4e  
       Jul 11, 2025
    没有删除按钮,我注明是 AI 回复了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2618 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 83ms · UTC 12:19 · PVG 20:19 · LAX 05:19 · JFK 08:19
    ♥ Do have faith in what you're doing.