MySQL 运维实战课
张新铭(俊达)
云掣科技资深数据库专家,前淘宝网、支付宝数据库专家
854 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已更新 23 讲/共 41 讲
MySQL 运维实战课
15
15
1.0x
00:00/00:00
登录|注册

21|表连接如何执行?

你好,我是俊达。
这一讲我们来聊一聊 MySQL 中的表连接是怎么执行的。
从功能或语法上来看,表连接有内连接(Inner Join)和外连接(Outer Join)。外连接又包括左连接(Left Outer Join)、右连接(Right Outer Join)、全外连接(Full Outer Join)。此外,还有半连接(Semi Join)、反连接(Anti Join),这些连接方式会在 in、not in、exists、not exists 等查询中使用。
不管是哪种连接,在实现层面上,MySQL 会使用嵌套循环连接或哈希连接这两大类算法,它们有着不同的执行方式,以及不同的成本计算方法。执行多表连接时,优化器还需要选择最佳的连接顺序。对于内连接,优化器可以自动选择表的连接顺序,以最低的成本来执行 SQL。对于外连接,修改表的连接顺序会影响查询的结果,因此优化器不能随意调整表的顺序。MySQL 中还有一种特殊的连接方式——STRAIGHT_JOIN,使用 STRAIGHT_JOIN 时,连接顺序是固定的。
对于已经确定连接顺序的两个表,MySQL 有几种算法来实现表连接。
嵌套循环(Nested-Loop)
嵌套循环是 MySQL 中最早支持的连接算法。当驱动表中需要参与关联的记录较少,并且可以使用选择性较高的索引查找到被驱动表的关联记录时,使用嵌套循环效率很高。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
  • 解释
  • 总结

1. MySQL中的表连接包括内连接和外连接,以及特殊的连接方式——STRAIGHT_JOIN。 2. MySQL使用嵌套循环连接或哈希连接算法来执行表连接。 3. MySQL优化器在执行多表连接时需要选择最佳的连接顺序,对于内连接可以自动选择表的连接顺序以最低的成本来执行SQL。 4. 外连接的连接顺序影响查询结果,因此优化器不能随意调整表的顺序。 5. MySQL中的表连接算法包括嵌套循环连接、块嵌套循环连接、哈希连接和Batched Key Access连接。 6. BKA(Blocked Key Access)算法可以提高性能,特别是在一些特定的场景下。 7. 优化器在计算表的连接顺序时,需要评估每个表有多少行记录满足条件,这决定了有多少行记录会参与到后续的连接操作中。 8. 表的直方图可以用于获取更精确的行数评估,对执行计划有影响。 9. 在多表连接的查询中,条件过滤可能会影响执行计划。 10. 可以使用optimizer_switch中的condition_fanout_filter选项来控制是否开启条件过滤计算。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《MySQL 运维实战课》
新⼈⾸单¥59
立即购买
登录 后留言

精选留言

由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论
显示
设置
留言
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部