簡體   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