mssql sqlserver 联接算法说明


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


1.循环联接

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



2.hash联接

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



3.合并联接

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

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

mssql sqlserver 联接的语法格式说明


摘要:
下文讲述联接的语法格式,如下所示:

联接关键字常放入from关键字后,内部联接也可放入where子句中


1.使用from 子句联接

from子句基本语法如下:
from table1 join type table2
[on 条件]
——参数说明——
join type:
联接类型:内部联接、外部联接、左联接、右联接

 select a,b,c,d from 
  table1  join table2 
  on table1.***  = table2.***


2.where子句联接

  select a,b,c,d from 
   table1,table2 
  where table1.***  = table2.***

mssql sqlserver 子查询注意事项说明


摘要:
下文讲述我们平常使用子查询的注意事项,如下所示:
实验环境:sql server 2008 R2


子查询注意事项:
1.子查询为放在括号中
2.子查询中不能使用order by 关键字,
如果子查询为 top N 选择时,可以使用order by
3. 子查询可返回单行和多行
对等于 子查询必须使用返回单行子查询
4.依赖外部查询的子查询的效率问题
在子查询的编写上,需注意子查询的语句写法和连接及临时表进行性能对比,避免出现低效的sql脚本写法。