您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

是什么使SQL查询优化程序在嵌套循环和哈希联接之间做出决定

是什么使SQL查询优化程序在嵌套循环和哈希联接之间做出决定

NESTED LOOPS如果循环内的条件是可 保留的 ,则 很好 ,即可以使用index来限制记录数。

对于这样的查询

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

a带头,a将记录from中的每条记录,并b应找到in中的所有相应记录。

如果b.b1被索引并且具有高基数,那么NESTED LOOP将是一种首选方式。

在中sql Server,这也是执行非等值联接的唯一方法(子句中的=条件ON除外)

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

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

Na * (Nb / C) * R

其中,NaNb是记录的数量abC是该指数的基数,而R对于行查找需要一定的时间(1在所有领域SELECTWHEREORDER BY分句由索引覆盖,大约10如果他们不)

Na + (Nb * H)

,其中H是构建和查找哈希表(每个记录)所需的常数的总和。它们被编程到引擎中。

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

SQLServer 2022/1/1 18:37:22 有546人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶