Content #
SNLJ 是最简单粗暴的算法,所以也称为 Simple Nested-Loop Join。有些资料中会用 NLJ 指代 SNLJ。
SNLJ 的执行过程是这样的:
- 遍历 Outer 表,取一条记录 r1;
- 遍历 Inner 表,对于 Inner 表中的每条记录,与 r1 做 join 操作并输出结果;
- 重复步骤 1 和 2,直至遍历完 Outer 表中的所有数据,就得到了最后的结果集。
SNLJ 算法虽然简单,但也很笨拙,存在非常明显的性能问题。原因在于,每次为了匹配 Outer 表的一条记录,都要对 Inner 表做一次全表扫描操作。而全表扫描的磁盘 I/O 开销很大,所以 SNLJ 的成本很高。