SQL Server的三种物理连接之Hash Join(三)

SQL Server的三种物理连接之Hash Join(三)
        </h1>
        <div class="clear"></div>
        <div class="postBody">
            <div id="cnblogs_post_body" class="blogpost-body blogpost-body-html">

简介

hash join icon

在 SQL Server 2012 在一些特殊的例子下会看到下面的图标:

batch hash table build icon

Hash Join分为两个阶段,分别为生成和探测阶段。

首先是生成阶段,将输入源中的每一个条目经过散列函数的计算都放到不同的Hash Bucket中,其中Hash Function的选择和Hash Bucket的数量都是黑盒,通常来讲,查询优化器都会使用连接两端中比较小的哪个输入集来作为第一阶段的输入源。

接下来是探测阶段,对于另一个输入集合,同样针对每一行进行散列函数,确定其所应在的Hash Bucket,在针对这行和对应Hash Bucket中的每一行进行匹配,如果匹配则返回对应的行。    

通过了解哈希匹配的原理不难看出,哈希匹配涉及到散列函数,所以对CPU的消耗会非常高,此外,在Hash Bucket中的行是无序的,所以输出结果也是无序的。

示例演示:

 使用hash join执行下面查询

 

查看统计信息:

Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'Tbl10'. Scan count 1, logical reads 10, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'Tbl100'. Scan count 1, logical reads 100, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

优缺点:

•所有逻辑连接类型都可以处理。

•它确实需要一个相当大的内存量,足够大,以适应整个左侧输入。(可能会在tempdb中)

•在创建哈希索引的整个过程中,没有一行将返回。

在连接条件中至少有一列需要使用一个相等的比较。

因为昂贵的建立阶段,这是最资源密集的连接算法。然而,一旦哈希表是建立的,这个连接算法可以很快。对于没有可用的索引的大表,在探测阶段的时间节省将超过建设阶段的额外费用。然而,记住,因为大量的内存需求,只有极少数的这些可以运行在同一时间。

分类: SQL Server
<div id="blog_post_info">
0
0
<div class="clear"></div>
<div id="post_next_prev">

<a href="https://www.cnblogs.com/qianlixing/p/4764680.html" class="p_n_p_prefix">« </a> 上一篇:    <a href="https://www.cnblogs.com/qianlixing/p/4764680.html" data-featured-image="" title="发布于 2015-08-29 23:49">SQL Server的三种物理连接之Merge join(二)</a>
<br>
<a href="https://www.cnblogs.com/qianlixing/p/4785223.html" class="p_n_p_prefix">» </a> 下一篇:    <a href="https://www.cnblogs.com/qianlixing/p/4785223.html" data-featured-image="" title="发布于 2015-09-06 13:06">SQL Server查看表信息</a>
posted @ 2015-08-29 23:51  行千里  阅读( 1079)  评论( 0编辑  收藏  举报
</div><!--end: topics 文章、评论容器-->
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值