回答

收藏

是什么使SQL在嵌套循环和哈希连接之间做出决定

技术问答 技术问答 182 人阅读 | 0 人回复 | 2023-09-14

通常,是什么使SQL在嵌套循环和哈希连接之间做出决定。
# e( a7 l/ a* W  B, R- l  o4 H                                                                2 _+ _2 k6 B: T
    解决方案:                                                                1 `8 _, t, d  V  l8 j/ ?% Q) I  k
                                                                NESTED LOOPS如果循环中的条件可以 保留的    ,则 很好    ,即可使用index限制记录数。
8 G2 r. N+ T/ i! C5 J对此类查询:
: @. j& y& X. `4 ZSELECT  *FROM    aJOIN    bON      b.b1 = a.a1WHERE   a.a2 = @myvar,a带头,a将记录from每一个记录,和b应找到in中的所有相应记录。
% M! U, N- H) y/ N) O' n* ?$ }如果b.b被索引并且基数高,那么NESTED LOOP将是首选。* y- c& F" G8 u7 @2 V$ q1 P
在中SQL Server,这也是执行非等值连接的唯一方法(子句中=条件ON除外)
0 K. ^; C3 y5 mHASH JOIN 最快的方法是分析所有(或几乎所有)记录。5 N3 x9 ?% t( Q
它从中获所有记录b,在上面建一个哈希表,然后从中获录,a并使用join列值作为查找哈希表的键。
* ?9 J: B- |1 @4 F; \# cNESTED LOOPS 需要这段时间:Na * (Nb / C) * R,5 I0 g; A& s, ?" d# C& ^
其中,Na和Nb是记录的数量a和b,C是指数的基数,而R搜索需要一定的时间(1)SELECT,WHERE并ORDERBY分句由索引覆盖,大约10,如果他们不是)' v; D7 g; P$ }
HASH JOIN 需要这段时间:Na   (Nb * H)- Z( [$ K& L  F" d( p, E
,其中H构建和搜索哈希表(每个记录)所需的常数总和。它们被编程到引擎中。
8 z0 J: a* Q* J, K' ]# _' BSQL Server 用表计算基数,计算和比较两个值,然后选择最佳计划。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则