# Join 技术 (A)

+ `Hash Join`:
  + 一次性将驱动表读取到 TiDB 构造的 **hash** 表里，然后用被驱动表数据和 **hash** 表比较返回匹配的数据。
  + 多线程并发操作，速度较快，消耗内存。适合内存较大的场景。

------------------------------------------------------------

案例中的执行计划中选择的 join 算法有 Hash Join 和 Index Hash Join，这里我们也简单介绍下 TiDB 中的 join 算法的实现机制和适用场景，join 算法有四种：
- Hash Join
  - 不要求 join 字段有序，一次性将驱动表读取到 TIDB 构造 hash 表，然后用被驱动表数据和 hash 表比较返回匹配的数据。
  - 多线程并发操作，速度较快，耗内存。适合内存较大的场景。
- Merge Join
  - 需要 join 字段有序（有索引或者排序后的数据），分批读取驱动表有序表数据然后和被驱动表有序表数据匹配后返回
  - 没有并发，占用内存小，执行实践一般比 Hash Join 长。适合对执行时间要求不高的，大表，小内存场景。
- Index Join（Index Nested Loop Join）
  - 需要 join 字段有序（有索引或者排序后的数据），并发的根据驱动表有序数据构造被驱动表的查询范围进行查询，然后和该批次驱动表数据进行匹配
  - 多线程并发，适合驱动表结果集较小（1万 行左右）的场景
- Index Hash Join（Index Nested Loop Hash Join）
  - 该算法与 Index Join 使用条件完全一样，但在某些场景下会更为节省内存资源
