我有一个例子,使用 JOIN 或 IN 会给我正确的结果...哪个通常具有更好的性能,为什么?它在多大程度上取决于您运行的数据库服务器? (仅供引用,我正在使用 MSSQL)
最佳答案
一般来说,IN
和 JOIN
是不同的查询,可以产生不同的结果。
SELECT a.*
FROM a
JOIN b
ON a.col = b.col
不等于
SELECT a.*
FROM a
WHERE col IN
(
SELECT col
FROM b
)
,除非 b.col
是唯一的。
但是,这是第一个查询的同义词:
SELECT a.*
FROM a
JOIN (
SELECT DISTINCT col
FROM b
)
ON b.col = a.col
如果连接列是 UNIQUE
并进行标记,则这两个查询会在 SQL Server
中生成相同的计划。
如果不是,则 IN
比 DISTINCT
上的 JOIN
更快。
有关性能详细信息,请参阅我的博客中的这篇文章:
关于SQL JOIN 与 IN 性能比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1200295/