在我们可以使用 JOIN 的地方,在 SQL 语句中使用“IN”关键字是否存在性能问题?
SELECT xxx
FROM xxx
WHERE ID IN (SELECT Id FROM xxx)
在我们可以使用 JOIN 的地方,在 SQL 语句中使用“IN”关键字是否存在性能问题?
SELECT xxx
FROM xxx
WHERE ID IN (SELECT Id FROM xxx)
不,可以使用。
您可以在所有 RDBMS 中使用 IN、EXISTS 编写上述查询,有些还支持 INTERSECT。
从语义上讲,这是一个半联接,它“给我表 A 中的行,我在表 B 中至少有一个匹配项”。INNER JOIN 是“给我所有匹配的行”
因此,如果 TableA 有 3 行,而 TableB 有 5 行匹配:
这就是我和其他 SQL 类型在这里推送 IN 和 EXISTS 的原因:JOIN 是错误的,需要 DISTINCT 并且会更慢。
EXISTS 支持多列 JOIN,IN 在 SQL Server 中不支持(在其他列中支持)。
而不是一个独特的,你可以使用 group by。我曾遇到过使用 join 获得更好响应时间的案例。通常,当我通过主键/外键关系连接所有行并且在哪里查看非键列时。特别是如果多个连接。IN 有时会强制进行索引扫描,如果连接到 PK,通常会使用搜索。当您设计表时,将主键排列在一起,以便它们处于相同的顺序并明确声明 PK / FK 关系。加入不限于PK / FK。但是连接的一个常见用途是遍历 PK / FK 关系,在这种情况下,我使用键对齐的连接的经验是最好的性能。
正如您在此处所读到的,JOINS 比子选择更快。