任何人都可以告訴我哪個查詢會更快,爲什麼?在vs mysql內部連接mysql查詢
(1) select * from userInfo where id in (select id from user)
(2) select a.* from userInfo a,user b where a.id = b.id
這些是兩個大表有1億條記錄,我試過了,(2)查詢更快,但我不知道爲什麼?謝謝!
任何人都可以告訴我哪個查詢會更快,爲什麼?在vs mysql內部連接mysql查詢
(1) select * from userInfo where id in (select id from user)
(2) select a.* from userInfo a,user b where a.id = b.id
這些是兩個大表有1億條記錄,我試過了,(2)查詢更快,但我不知道爲什麼?謝謝!
連接(隱式或顯式)大多數情況下會更快(特別是如果涉及的列正確編制索引)。
這是因爲IN
表達式對每一行計算一次。所以,如果IN
表達式中有大數據集,那麼這將是一個非常昂貴的事情來評估。
概念上這兩個查詢是等價的。但是MySQL的查詢計劃器在優化WHERE x in (SELECT ...)
方面不是很好。如果您看到EXPLAIN
輸出,您會看到第一個查詢的工作方式是掃描整個userInfo
表,然後對user
表中的索引測試每個id
,如果userInfo
遠大於user
,這將會變慢。
@DipenShah不,它不是重複的。 – Barmar
(這可能是某件事的重複,但是) – Strawberry
@Barmar誤讀它。道歉。 –