是什么让SQL查询优化器在嵌套循环和散列连接之间做出决定

前端之家收集整理的这篇文章主要介绍了是什么让SQL查询优化器在嵌套循环和散列连接之间做出决定前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
通常,什么使SQL查询优化器在嵌套循环和散列连接之间做出决定.

解决方法

如果循环内的条件是可以攻击的,那么嵌套的LOOPS是好的,即索引可以用来限制记录的数量.

对于这样的查询

SELECT  *
FROM    a
JOIN    b
ON      b.b1 = a.a1
WHERE   a.a2 = @myvar

,有一个领先的,将从a中取出每条记录,并找到b中的所有相应记录.

如果b.b1被索引并具有高基数,则NESTED LOOP将是首选方式.

sql Server中,它也是执行非等同连接的唯一方法(在ON子句中除了= condition之外)

如果应该解析所有(或几乎所有)记录,则HASH JOIN是最快的方法.

它从b获取所有记录,在它们上构建一个哈希表,然后从a获取所有记录,并使用join列的值作为查找哈希表的键.

> NESTED LOOPS需要这段时间:

Na *(Nb / C)* R,

其中Na和Nb是a和b中的记录数,C是索引基数,R是行查找所需的常量时间(1是SELECT,WHERE和ORDER BY子句中的所有字段都被索引覆盖,关于如果他们不是10)
> HASH JOIN需要这段时间:

Na(Nb * H)

,其中H是构建和查找哈希表(每条记录)所需的常量之和.它们被编程到发动机中.

sql Server使用表统计信息计算基数,计算并比较这两个值并选择最佳计划.

猜你在找的MsSQL相关文章