【笔记】SQL Join 的类型及实现方法

简介

JOIN 子句用于把来自两个或多个表的行结合起来,基于这些表之间的共同字段。

select * 
from t join t2
on t.id = t2.id;

类型

  1. (INNER) JOIN,内连接,只连接匹配的行。
  2. LEFT (OUTER) JOIN,左外连接,返回左表的全部行和右表满足 ON 条件的行,如果左表的行在右表中没有匹配,那么留作 NULL.
  3. RIGHT (OUTER) JOIN,右外连接。
  4. FULL (OUTER) JOIN,全连接,mysql 中不支持。

TiDB 中的实现方式

  1. Hash Join,选择一个 inner 表来构造哈希表,然后对 outer 表的每一行数据都去这个哈希表中查找是否有匹配的数据。
  2. Index Lookup Join,每次取得 outer 表中的一批数据,使用索引在 inner 表中进行快速匹配。
    1. 从 Outer 表中取一批数据,设为 B;
    2. 通过 Join Key 以及 B 中的数据构造 Inner 表取值范围,只读取对应取值范围的数据,设为 S;
    3. 对 B 中的每一行数据,与 S 中的每一条数据执行 Join 操作并输出结果;
    4. 重复步骤 1,2,3,直至遍历完 Outer 表中的所有数据。
  3. Sort Merge Join,将 Join 的两个表,首先根据连接属性进行排序,然后进行一次扫描归并, 进而就可以得出最后的结果。
    一般在连接列为索引列的情况下可以考虑选择使用 SMJ。
发布了375 篇原创文章 · 获赞 305 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/m0_37809890/article/details/104358787