是什么让SQL查询优化器在嵌套循环和散列连接之间做出决定
发布时间:2020-12-12 07:00:12 所属栏目:MsSql教程 来源:网络整理
导读:通常,什么使SQL查询优化器在嵌套循环和散列连接之间做出决定. 解决方法 如果循环内的条件是可以攻击的,那么嵌套的LOOPS是好的,即索引可以用来限制记录的数量. 对于这样的查询: SELECT *FROM aJOIN bON b.b1 = a.a1WHERE a.a2 = @myvar ,有一个领先的,将从a中
通常,什么使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) Na(Nb * H) ,其中H是构建和查找哈希表(每条记录)所需的常量之和.它们被编程到发动机中. SQL Server使用表统计信息计算基数,计算并比较这两个值并选择最佳计划. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |