我想知道使用
是否存在性能差异SELECT Table1.*
FROM Table1
WHERE Col1 IN (SELECT Col2 FROM Table2)
和
SELECT Table1.*
FROM Table1 INNER JOIN Table2
ON Table1.Col1 = Table2.Col2
答案 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的表现会更好。