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
《MySQL 运维实战课》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
精选留言
由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论