1.sort merge join
排序合并连接的执行过程如下所示:
将每个行源的行按连接谓词列排序
然后合并两个已排序的行源,并返回生成的行源
例如:
select * from employees d,departments t where d.department_id=t.department_id;
访问机制如下:访问departments表并排序department_id列,访问employees表并排序department_id列,然后依次交替比较、归并。
注意:排序合并连接一般用在两张表中没有索引,并且连接列已经排好序的情况下。
2.嵌套循环连接(Nested Loops Join)
*两个表中的一个被定义为“外部表”(或“驱动表”)
*另一个表被称为“内部表”
*将针对外部表中折每一行检索内部表中所有匹配的行
注意:join 的顺序很重要,一般选择小表作为“驱动表”,大表作为“内部表”
例如 select *
from Sales S inner join Customers C
on S.Cust_Id = C.Cust_Id
option(loop join)
3.hash join
- 优化器对小表利用连接键在内存中建立HASH表
*扫描大表,每得到一条记录,就来HASH表中“探测”一次,找出与hash表匹配的行
注意:Hash Join 是CBO做大数据集连接时的常用方式。