贝利信息

SQL OUTER JOIN 的内部执行逻辑

日期:2026-01-20 00:00 / 作者:舞夢輝影
SQL OUTER JOIN 并非先内连接再补NULL,而是以驱动表逐行扫描并强制填充NULL:LEFT JOIN以左表为驱动表,RIGHT JOIN以右表为驱动表,FULL OUTER JOIN需两遍扫描或双哈希表合并,NULL是语义强制而非事后修补,性能关键在驱动表选择与被驱动表ON字段索引。

SQL OUTER JOIN 的执行逻辑不是先做 INNER JOIN 再补 NULL,而是基于驱动表(左表或右表)逐行扫描,对每行在被驱动表中查找匹配项;没找到就用 NULL 填充整行,确保驱动表所有记录都出现在结果中。

LEFT JOIN 的实际执行流程

SELECT * FROM A LEFT JOIN B ON A.id = B.a_id 为例:

RIGHT JOIN 和 FULL OUTER JOIN 的差异点

RIGHT JOIN 本质是把右表当驱动表,逻辑与 LEFT JOIN 对称;FULL OUTER JOIN 则需两遍扫描或哈希合并:

NULL 填充不是“事后补全”,而是语义强制

OUTER JOIN 的 NULL 不是执行完 INNER 后追加的修补操作,而是连接算法本身的设计结果:

性能关键:驱动表选择与索引利用

OUTER JOIN 性能瓶颈通常不在 NULL 填充,而在匹配查找效率: