Simple Nested Loop Join

Simple Nested Loop Join

Content #

SNLJ 是最简单粗暴的算法,所以也称为 Simple Nested-Loop Join。有些资料中会用 NLJ 指代 SNLJ。

SNLJ 的执行过程是这样的:

  1. 遍历 Outer 表,取一条记录 r1;
  2. 遍历 Inner 表,对于 Inner 表中的每条记录,与 r1 做 join 操作并输出结果;
  3. 重复步骤 1 和 2,直至遍历完 Outer 表中的所有数据,就得到了最后的结果集。

SNLJ 算法虽然简单,但也很笨拙,存在非常明显的性能问题。原因在于,每次为了匹配 Outer 表的一条记录,都要对 Inner 表做一次全表扫描操作。而全表扫描的磁盘 I/O 开销很大,所以 SNLJ 的成本很高。

Viewpoints #

From #

20 | 关联查询:如何提升多表Join能力?