2015-11-20 141 views
-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)查詢更快,但我不知道爲什麼?謝謝!

+2

@DipenShah不,它不是重複的。 – Barmar

+0

(這可能是某件事的重複,但是) – Strawberry

+0

@Barmar誤讀它。道歉。 –

回答

1

連接(隱式或顯式)大多數情況下會更快(特別是如果涉及的列正確編制索引)。

這是因爲IN表達式對每一行計算一次。所以,如果IN表達式中有大數據集,那麼這將是一個非常昂貴的事情來評估。

1

概念上這兩個查詢是等價的。但是MySQL的查詢計劃器在優化WHERE x in (SELECT ...)方面不是很好。如果您看到EXPLAIN輸出,您會看到第一個查詢的工作方式是掃描整個userInfo表,然後對user表中的索引測試每個id,如果userInfo遠大於user,這將會變慢。