是什么让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使用表统计信息计算基数,计算并比较这两个值并选择最佳计划.

相关文章

(一)日志传送架构 (1.1)相关服务器 主服务器 :用于生产的服务器,上面运行这生产SQL Server数据库...
(一)事故背景 最近在SQL Server 2012生产数据库上配置完事物复制(发布订阅)后,生产数据库业务出现了...
(一)测试目的 目前公司使用的SQL SERVER 2012高可用环境为主备模式,其中主库可执行读写操作,备库既...
(一)背景个人在使用sql server时,用到了sql server的发布订阅来做主从同步,类似MySQL的异步复制。在...
UNION和OR谓词 找出 product 和 product2 中售价高于 500 的商品的基本信息. select * from product wh...
datawhale组队学习task03