7

在我们可以使用 JOIN 的地方,在 SQL 语句中使用“IN”关键字是否存在性能问题?

SELECT xxx
FROM xxx
WHERE ID IN (SELECT Id FROM xxx)
4

3 回答 3

10

不,可以使用。

您可以在所有 RDBMS 中使用 IN、EXISTS 编写上述查询,有些还支持 INTERSECT。

从语义上讲,这是一个半联接,它“给我表 A 中的行,我在表 B 中至少有一个匹配项”。INNER JOIN 是“给我所有匹配的行”

因此,如果 TableA 有 3 行,而 TableB 有 5 行匹配:

  • INNER JOIN 是 15 行
  • 半连接是 3 行

这就是我和其他 SQL 类型在这里推送 IN 和 EXISTS 的原因:JOIN 是错误的,需要 DISTINCT 并且会更慢。

EXISTS 支持多列 JOIN,IN 在 SQL Server 中不支持(在其他列中支持)。

于 2011-08-06T10:43:32.443 回答
0

而不是一个独特的,你可以使用 group by。我曾遇到过使用 join 获得更好响应时间的案例。通常,当我通过主键/外键关系连接所有行并且在哪里查看非键列时。特别是如果多个连接。IN 有时会强制进行索引扫描,如果连接到 PK,通常会使用搜索。当您设计表时,将主键排列在一起,以便它们处于相同的顺序并明确声明 PK / FK 关系。加入不限于PK / FK。但是连接的一个常见用途是遍历 PK / FK 关系,在这种情况下,我使用键对齐的连接的经验是最好的性能。

于 2011-08-07T16:29:24.970 回答
-2

正如您在此处所读到的,JOINS 比子选择更快。

于 2011-08-06T10:01:14.433 回答