1)选择一个表(驱动表)在内存(PGA)中使用”连接列“生成hash表,选择数据集较小的做hash较好,
如果内存中放不下这个hash表,那么就需要放到临时表空间中。 这个步骤一般需要全表扫描驱动表,或者说需要连接的数据集
2) 全表扫描探测表,查询hash表
当驱动表生成了hash表后,遍历另一个表(也叫探测表),对探测表的每一条数据使用连接列的值到hash表中匹配,如果匹配上将对应数据保存到结果集中,直到查询结束。
3)输出hash结果
hash连接结束就得到了连接结果,跟索引扫描不同,hash连接一般是不需要再访问表的,所以hash连接对表的扫描一般是全表扫描或快速全索引扫描。
hash连接使用场景总结
hash连接是非常常用的连接方式,它有以下特点:
(1)适用于较大数据集的连接,并且连接条件必须是等值连接。
(2)尽量选择小的数据集作为驱动表在内存中生成hash表。
(3)设置一个较大的PGA可以加快hash连接的速度,避免使用临时表空间。
(4)多表连接时同样要注意连接顺序,中间结果集尽量小,少做无用功。
hash连接相对与嵌套循环,它实际上是通过空间来换取时间,因为它需要保存hash表,占用较大的内存,在临时表空间不足的情况下是可能报错的,而嵌套循环一般不会报错,但可能非常慢。