繁体   English   中英

在SQL语句中使用'IN'和子查询

[英]Using 'IN' with a sub-query in SQL Statements

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

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

不,可以使用。

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

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

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

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

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

EXISTS支持多列JOIN,IN不在SQL Server中(在其他情况下也是如此)。

而不是一个独特的,你可以使用group by。 我有过这样的情况,我使用join可以获得更好的响应时间。 通常当我通过主键/外键关系连接所有行并且where在哪里查看非键列时。 特别是如果有多个连接。 IN有时可以强制进行索引扫描,如果要进入PK,则连接将典型地使用搜索。 在设计表格时,表格会排列主键,因此它们的顺序相同,并明确声明PK / FK关系。 加入不限于PK / FK。 但是,连接的一个常见用途是走PK / FK关系,在这种情况下,我使用连接键的连接的经验是最佳性能。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM