Inner join, Outer join为逻辑链接,即SQL语句中From子句的表的链接方式,数据库会根据分析结果采起合适的底层物理链接方式Nested Loop Join, Merge Join, Hash Joinhtml
在http://darrenzhu.iteye.com/admin/blogs/2051560文章中有算法
“1. FROM 数据库
FROM后面的表标识了这条语句要查询的数据源和一些子句如:(1-J1)笛卡尔积,(1-J2)ON过滤,(1-J3)添加外部列,所要应用的对象。FROM过程以后会生成一个虚拟表VT1。 oop
(1-J1)笛卡尔积 性能
这个步骤会计算两个相关联表的笛卡尔积(CROSS JOIN) ,生成虚拟表VT1-J1。 url
(1-J2)ON过滤 spa
这个步骤基于虚拟表VT1-J1这一个虚拟表进行过滤,过滤出全部知足ON 谓词条件的列,生成虚拟表VT1-J2。 .net
(1-J3)添加外部行 htm
若是使用了外链接,保留表中的不符合ON条件的列也会被加入到VT1-J2中,做为外部行,生成虚拟表VT1-J3. ”对象
里面只提到了笛卡尔积,若是都是笛卡尔积的话,那么物理链接方式Nested Loop Join, Merge Join, Hash Join感受就没啥意义了,因此这个表示应该是不正确的,笛卡尔积应该是不能从物理链接方式Nested Loop Join, Merge Join, Hash Join中找到合适的链接算法时采起的策略,固然有时可能笛卡尔积也是最优方式。
浅谈SQL Server中的三种物理链接操做(Nested Loop Join、Merge Join、Hash Join)
http://blog.csdn.net/a5685263/article/details/51658637
咱们所常见的表与表之间的Inner Join,Outer Join都会被执行引擎根据所选的列,数据上是否有索引,所选数据的选择性转化为Loop Join,Merge Join,Hash Join这三种物理链接中的一种。理解这三种物理链接是理解在表链接时解决性能问题的基础
下面咱们经过一个表格简单总结这几种链接方式的消耗和使用场景:
嵌套循环链接 | 合并链接 | 哈希链接 | |
适用场景 | 外层循环小,内存循环条件列有序 | 输入两端都有序 | 数据量大,且没有索引 |
CPU | 低 | 低(若是没有显式排序) | 高 |
内存 | 低 | 低(若是没有显式排序) | 高 |
IO | 可能高可能低 | 低 | 可能高可能低 |
理解SQL Server这几种物理链接方式对于性能调优来讲必不可少,不少时候当筛选条件多表链接多时,查询分析器就可能不是那么智能了,所以理解这几种链接方式对于定位问题变得尤其重要。此外,咱们也能够经过从业务角度减小查询范围来减小低下性能链接的可能性。
多表链接的三种方式详解 HASH JOIN MERGE JOIN NESTED LOOP
三种链接工做方式比较:
Hash join的工做方式是将一个表(一般是小一点的那个表)作hash运算,将列数据存储到hash列表中,从另外一个表中抽取记录,作hash运算,到hash 列表中找到相应的值,作匹配。
Nested loops 工做方式是从一张表中读取数据,访问另外一张表(一般是索引)来作匹配,nested loops适用的场合是当一个关联表比较小的时候,效率会更高。
Merge Join 是先将关联表的关联列各自作排序,而后从各自的排序表中抽取数据,到另外一个排序表中作匹配,由于merge join须要作更多的排序,因此消耗的资源更多。 一般来说,可以使用merge join的地方,hash join均可以发挥更好的性能。
描述HASH JOIN ,MERGE JOIN ,NESTED LOOP
[url]http://blog.csdn.net/ksqqxq/article/details/6424632[/url]
hash_join算法原理 [url]http://wenku.baidu.com/view/b8e2a67da26925c52cc5bf5b.html[/url]