SQL JOIN 与 IN 性能比较?

标签 sql sql-server performance tsql

我有一个例子,使用 JOIN 或 IN 会给我正确的结果...哪个通常具有更好的性能,为什么?它在多大程度上取决于您运行的数据库服务器? (仅供引用,我正在使用 MSSQL)

最佳答案

一般来说,INJOIN 是不同的查询,可以产生不同的结果。

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 中生成相同的计划。

如果不是,则 INDISTINCT 上的 JOIN 更快。​​

有关性能详细信息,请参阅我的博客中的这篇文章:

关于SQL JOIN 与 IN 性能比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1200295/

相关文章:

javascript - 从网页中的 JavaScript 函数访问 PHP 变量

sql-server - SQL Server 通过 CTE 进行迭代

SQL服务器: update top(1) loop

java开关性能优化

database - 我应该使用字符串表来提高数据库效率吗?

sql - 使用 BIT 数据类型过滤 WHERE 子句中的查询

sql - 我需要一个查询以我的名字开头但不以该名字开头的 child

mysql - 每天SQL峰值

sql-server - 如何最好地在 SQL Server 中存储密码以便可以检索密码

.net - 一个 110 kb 的 .NET 4.0 应用程序需要 10 秒的冷启动时间,这是 Not Acceptable !