hash join 是Mysql 8.0.18版本中新推出的一种多表join算法。
在这之前,MySQL是使用了嵌套循环(Nested-Loop Join)的方式来实现关联查询的,二嵌套循环的算法其实性能是比较差的,而Hash Join的出现是要优化Nested-Loop Join的。
所谓Hash Join,其实是因为底层使用了Hash表。
Hash Join 是一种针对equal-join的一种场景优化,他的基本思想是将驱动表的数据加载到内存,并建立hash表,这样只需要遍历一次驱动表,然后再去通过哈希查找表中寻找匹配的行,就可以完成join操作了。
SELECT
student_name,school_name
from
students left join schools on students.school_id =schools.id;
以上,是一个left join 的SQL,在Hash Join的过程中,主要分为两个步骤,分别是构建和探测
构建阶段,假如优化器优化后使用students作为驱动表,那么就会把这个驱动表的数据构建到hash表中;
探测阶段,在这个过程中,从school表中取出记录之后,去hash表中查询,找到匹配数据,在做聚合就行了。