1. 基础概念:JOIN 与子查询的本质区别
1.1 JOIN 的核心作用
- 目标:直接关联两个表的行,通过匹配条件(如
ON
或USING
)合并数据。 - 典型场景:需要同时获取两个表的字段(如
SELECT A.col, B.col FROM A JOIN B
)。 - 执行逻辑:
数据库一次性处理两表关系,优化器可能选择 Nested-Loop Join、Hash Join 或 Merge Join 算法。
1.2 子查询的两种类型
- 非相关子查询(独立子查询):
SELECT * FROM A WHERE id IN (SELECT id FROM B); -- 子查询不依赖外层查询
- 相关子查询(依赖外层查询):
SELECT * FROM A WHERE EXISTS ( SELECT 1 FROM B WHERE B.id = A.id -- 子查询依赖外层 A.id );
2. 执行原理与性能差异的底层逻辑
2.1 JOIN 的优化空间
- 索引驱动:
若关联字段(如A.id
和B.id
)