多表联查--06--- join语句原理

Posted 高高for 循环

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多表联查--06--- join语句原理相关的知识,希望对你有一定的参考价值。

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


join语句原理

1.驱动表和被驱动表



2.简单嵌套循环连接


3.索引嵌套循环连接


4.块嵌套循环连接




默认 join_buffer_size = 256K

5. join小结

Hash join

mysql8.0 开始引入 Hash join

HashJoin一般包括两个过程,创建hash表的build过程 和 探测hash表的probe过程。

1.创建hash表的build过程

  • 遍历外表,以join条件为key,查询需要的列作为value创建hash表。这里涉及到一个选择外表的依据,主要是评估参与join的两个表(结果集)的大小来判断,谁小就选择谁,这样有限的内存更容易放下hash表。

2.探测hash表的probe过程。

  • hash表build完成后,然后逐行遍历内表,对于内表的每个记录,对join条件计算hash值,并在hash表中查找,如果匹配,则输出,否则跳过。所有内表记录遍历完,则整个过程就结束了。

图解

  • 图1是build过程,图2是probe过程,country_id是equal_join条件,countries表是外表,persons表是内表。

图1是外表的分片过程

图2内表的分片过程

分片进行build+probe过程

对比

以上是关于多表联查--06--- join语句原理的主要内容,如果未能解决你的问题,请参考以下文章

SQL基本操作——JOIN多表联查

多表连接的三种方式详解 HASH JOIN MERGE JOIN NESTED LOOP

EF框架下 Linq语句多表联查排序实例

TP框架多表联查

java 多表联查sql语句效率问题

MyBatis关于多表联查 关联关系之一--------一对多(单条sql语句查询)