mssql sqlserver 联接算法说明


摘要:
对于联接查询,sql引擎会根据表之间的数据、索引、统计计划等情况,选择合适的联接方式
(循环联接、合并联接、哈希联接)


1.循环联接

循环联接又称之为“嵌套迭代”。
它将一个联接作为输入表,另一张表作为内部表,
通过对输入表的循环实现数据的匹配,
通俗的讲:循环内部表,并从输入表中找到相应的匹配结果
————-应用场景———————
外部输入表行数较少,内部表行数多(匹配列上建立相应的索引),则循环联接性能最佳。



2.hash联接

hash联接算法:用于大型非索引未排序表;
它对处理复杂查询的中间结果非常有效,估算器只需估算中间结果大小,对于复杂查询,可能
会存在误差;
hash联接算法:是我们在联接中最常见的一种匹配算法。
————-应用场景———————
1.联接无合适的suoyin
2.中间结果非常大
————–hash联接的优点—–
在hash联接中,分析器会将结果小的表作为输入,对联接列值进行hash函数运算,并生成的结果
放入hash表中,避免访问数据时,出现表扫描。



3.合并联接

当两个条件列都进行了排序,则会采用合并联接对每个输入获取一行进行比较。
例:内联接的操作中,行值相等则返回,不相等则继续下一行。
———————-
合并联接上所使用的列如果建立了相关的索引,则是一种非常高效的联接方式。

合并联接是联接算法中最快的一种算法。