提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
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过程
对比
|