SQL join 和 in 性能比较

事实上,join 和 in 虽然有可能产生相同的结果,但它们表达的其实是两种不同的意思,示例如下:

1
2
3
-- JOIN:对于 a 表的某一行,需要遍历出 b 表中,所有 b.col 和 a.col 相同的行;
SELECT a.* FROM a JOIN b
ON a.col = b.col;
1
2
3
4
5
-- IN:对于 a 表的某一行,只需要 b 表中存在一条与 a.col 相同的行即可返回,无须遍历 b 表所有行;
SELECT a.* FROM a
WHERE col in (
SELECT col FROM b
);

因此,如果我们将 b.col 显示声明为 unique 时,那么以上两条语句通常会生成相同的执行计划,速度差不多,示例如下:

1
2
3
4
SELECT a.* FROM a JOIN (
SELECT DISTINCT col FROM b
)
ON b.col = a.col;

SQL join 和 in 性能比较
https://ccw1078.github.io/2024/11/26/SQL join 和 in 性能比较/
作者
ccw
发布于
2024年11月26日
许可协议