我有一个例子,使用连接或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并标记为UNIQUE,则这两个查询都会在SQL Server中生成相同的计划.

如果不是,那么INDISTINCTJOIN快.

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

Sql相关问答推荐

在postgresql中使用来自另一个字段的日期名称作为JSONB查询中的关键字

在SQL Server中使用LEFT连接包含特定记录

如何从上一个值减go 值

Postgres JSONB对象筛选

无效和不匹配的计数

在postgres中动态计算出现次数并插入到json中

为表中每个缺少的引用创建新行

Django将字符串筛选为整数?

Ffltter&;Dart SQL Lite包:是否可以在一个查询中执行多条更新语句(每次执行不同的WHERE参数)

过go 四周未填充的数据,即W50,51,52-SQL

获得第三名或最老的记录

PATINDEX中与[A-Z]匹配(U除外)的正则表达式

Postgres SQL查询从字符串中获取邮箱地址

在SQL中转换差异表的多列

创建具有多个子查询的 SQL 视图

两个具有 NULL 值的表达式结果之间的差异

获取多个开始-结束时间戳集之间经过的时间

在SQL中实现表格数据透视类型报表

使用对 nvarchar 列的多个 LIKE 操作优化 SQL 查询

强制 SQL 始终通过 R 从视图中返回至少一行