1概述

hash join 在特性与merge join相同,都需要一个等值条件。当在连接条上无法命中索引,或大集合的Join, nested join和 merge join可能就无法得到很好的性能,这时我们就需要考虑用hash join.

2基本算法

Hash join 分为两个阶段,build和probe。在build阶段,会将其中一个集合作为build set,然后hash build table在连接条件上的列,并将结果存储在内存中的(命名为build hash table).  在probe阶段(将第二个集合命名为probe set),每一行hash probe set在连接条件上的列,然后与build hash table比较,如果相等,则返回。

伪代码:

for each row R1 in the build table
    begin
        calculate hash value on R1 join key(s)
        insert R1 into the appropriate hash bucket
    end
for each row R2 in the probe table
    begin
        calculate hash value on R2 join key(s)
        for each row R1 in the corresponding hash bucket
            if R1 joins with R2
                return (R1, R2)
    end

3 示例

测试数据

View Code

create table T1 (a int, b int, x char(200))create table T2 (a int, b int, x char(200))create table T3 (a int, b int, x char(200))set nocount ondeclare @i intset @i = 0while @i < 1000begininsert T1 values (@i * 2, @i * 5, @i)set @i = @i + 1endset @i = 0while @i < 10000begininsert T2 values (@i * 3, @i * 7, @i)set @i = @i + 1endset @i = 0while @i < 100000begininsert T3 values (@i * 5, @i * 11, @i)set @i = @i + 1end

执行SQL:

SET STATISTICS PROFILE ON
select *
from (T1 inner join T2 on T1.a = T2.a)inner join T3 on T1.b = T3.a
option (hash join)

执行结果:

SQL JOIN-Hash Join相关推荐

  1. Nested Loop,Sort Merge Join,Hash Join

    三种连接工作方式比较: Nested loops 工作方式是从一张表中读取数据,访问另一张表(通常是索引)来做匹配,nested loops适用的场合是当一个关联表比较小的时候,效率会更高. Merg ...

  2. SQL优化(一) Merge Join vs. Hash Join vs. Nested Loop

    本文介绍了Merge Join,Hash Join,Nested Loop这三种数据库Join方式的工作原理,并通过实验进一步说明了其适用范围. 原创文章,转载请务必将下面这段话置于文章开头处(保留超 ...

  3. 深入理解Oracle表(5):三大表连接方式详解之Hash Join的定义,原理,算法,成本,模式和位图

    Hash Join只能用于相等连接,且只能在CBO优化器模式下.相对于nested loop join,hash join更适合处理大型结果集        Hash Join的执行计划第1个是has ...

  4. Mysql 优化器内部JOIN算法hash join Nestloopjoin及classic hash join CHJ过程详解

    Mysql hash join之classic hash join CHJ过程详解 hash join的历史 优化器里的hash join算法在SQL Server.Oracle.postgress等 ...

  5. 表的连接方式:NESTED LOOP、HASH JOIN、SORT MERGE JOIN

    表连接方式及使用场合 NESTED LOOP 对于被连接的数据子集较小的情况,nested loop连接是个较好的选择.nested loop就是扫描一个表,每读到一条记录,就根据索引去另一个表里面查 ...

  6. 表的连接方式:NESTED LOOP、HASH JOIN、SORT MERGE JOIN【转】

    表连接方式及使用场合 NESTED LOOP 对于被连接的数据子集较小的情况,nested loop连接是个较好的选择.nested loop就是扫描一个表,每读到一条记录,就根据索引去另一个表里面查 ...

  7. HASH SEMI JOIN (semi join) 比 hash join 快!

    如果没有优化过几千几万个SQL,哪里能练出火眼金睛,注意看跑得慢的SQL是HASH JOIN,跑得快的SQL是 HASH JOIN RIGHT SEMI 也就是说跑得慢的SQL是 HASH JOIN( ...

  8. oracle join 嵌套,誰能真正理解hash join/nested loop/merge join

    关于这三种JOIN的理解.Nested loop join,Hash join,Sort merge join Nested loop join: 步骤:确定一个驱动表(outer table),另一 ...

  9. SQL优化器原理 - Auto Hash Join

    这是MaxCompute有关SQL优化器原理的系列文章之一.我们会陆续推出SQL优化器有关优化规则和框架的其他文章.添加钉钉群"关系代数优化技术"(群号11719083)可以获取最 ...

  10. Hash join 和nested loop

    Hash join 和nested loop 总所周知,Oracle数据库常用的两种优化器:RBO(rule-based-optimizer)和CBO(cost-based-optimizer).目前 ...

最新文章

  1. 在Ubuntu下FFmpeg编译,支持x264和x265(HECV)
  2. 雷军:年轻人入职半年内不要对战略和业务提意见,很多想法都不靠谱
  3. PHP获取页面执行时间的方法
  4. Tableau研学小课堂(part6)--集
  5. searchindexer.exe占cpu使用率高
  6. 页面JS实现按钮点击增加输入框
  7. 【POJ-2796】Feel Good【单调栈】
  8. 闪马智能+兑观科技|视频智能解析联合实验室揭牌成立
  9. windows10自带屏保设置
  10. display tearing小结
  11. 用计算机测缘分,用两人的姓名测姻缘 免费测试两个人的缘分
  12. 【网络原理】知识点汇总2
  13. Python open()函数文件打开、读、写操作详解
  14. 边缘计算招聘 :边缘不再「边缘」,计算无处不在
  15. 微信公众平台测试帐号申请最新地址
  16. 解决删除文件时出现“该项目不在XX中,请确认该项目的位置然后重试”的提示
  17. 学环境工程我后悔了_环境工程专业真就那么坑吗?
  18. 解密联物电子科技冠军电感(恩智浦智能车竞赛之电磁信号采集)
  19. IOS跟ANDROID的区别
  20. C#导入导出Excel和Excel与XML的相互转换

热门文章

  1. 如何在 Outlook 中使用外出时的助理程序
  2. FTP两种工作模式:主动模式(Active FTP)和被动模式(Passive FTP)
  3. Maven用仓库外的jar进行编译
  4. Eclipse-cvs指南
  5. [转] 哈佛大学研究:一个人成为废物的九大根源
  6. 基于keras中IMDB的文本分类 demo
  7. Java script第二课
  8. python web开发-flask中日志的使用
  9. 以整体思维看问题:解决单页应用,系统角色请求覆盖身份唯一标识(本项目中是session_id命名的)发送请求问题...
  10. android 自定义控件(FloatLabelLayout)