使用IN SELECT和INNER JOIN之间的区别

时间:2018-05-29 00:15:40

标签: sql sql-server performance select inner-join

我想知道使用

是否存在性能差异
SELECT Table1.*
FROM Table1
WHERE Col1 IN (SELECT Col2 FROM Table2)

SELECT Table1.*
FROM Table1 INNER JOIN Table2
ON Table1.Col1 = Table2.Col2

3 个答案:

答案 0 :(得分:3)

两人做不同的事情。 in版本不会返回重复项。 inner join会返回重复项。

通常,inner join版本具有更好的性能,但这取决于数据和数据库。

我通常会使用exists

SELECT t1.*
FROM Table1 t1
WHERE EXISTS (SELECT FROM Table2 t2 WHERE t2.Col2 = t1.col1);

这可以直接利用table2(col2)上的索引。

答案 1 :(得分:1)

通常,连接比子查询工作得更快。但有时表现可能取决于表格中的数据或其他因素。

您可以通过JOIN或SUBQUERY编写SQL,SQL Server将始终根据执行计划对其进行转换。

您可以看到更多:https://www.essentialsql.com/what-is-the-difference-between-a-join-and-subquery/

答案 2 :(得分:0)

SELECT Table1.*
FROM Table1
WHERE Col1 IN (SELECT Col2 FROM Table2)

在这个查询中,我不能在我的结果集中使用table2的任何列。

如果我需要两个表的列,那么我将使用INNER JOIN。

SELECT Table1.*
FROM Table1 INNER JOIN Table2
ON Table1.Col1 = Table2.Col2

在一对一的关系中,根据要求,INNER JOIN的表现会更好。