From字句中表的连接类型,原理,Inner Join, Hash Join

阅读更多

Inner join, Outer join为逻辑连接,即SQL语句中From子句的表的连接方式,数据库会根据分析结果采取合适的底层物理连接方式Nested Loop Join, Merge Join, Hash Join

 

在http://darrenzhu.iteye.com/admin/blogs/2051560文章中有

“1. FROM 

FROM后面的表标识了这条语句要查询的数据源和一些子句如:(1-J1)笛卡尔积,(1-J2)ON过滤,(1-J3)添加外部列,所要应用的对象。FROM过程之后会生成一个虚拟表VT1。 

(1-J1)笛卡尔积 

这个步骤会计算两个相关联表的笛卡尔积(CROSS JOIN) ,生成虚拟表VT1-J1。 

(1-J2)ON过滤 

这个步骤基于虚拟表VT1-J1这一个虚拟表进行过滤,过滤出所有满足ON 谓词条件的列,生成虚拟表VT1-J2。 

(1-J3)添加外部行 

如果使用了外连接,保留表中的不符合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

http://blog.csdn.net/gao1440156051/article/details/52388644http://blog.csdn.net/gao1440156051/article/details/52388644

三种连接工作方式比较:

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]

你可能感兴趣的:(hash,join,nested,merge,连接)