2016-08-02 121 views
1

我有一些表: 表A(cola1,cola2,cola3,cola4,cola5) tableB的(colb1,colb2) 表C(colc1,colc2,colc3) tableA.cola2指tableB.colb1 和tableA.cola3指tableC.colc1 我想從所有這些表中檢索數據,我一直在使用加入這樣的查詢:連接表

Select tableA.cola1, tableA.cola2, tableA.cola3, tableA.cola4, tableA.cola5, tableB.colb2, tableC.colc2, tableC.colc3 
FROM tableA 
INNER JOIN tableB ON tableA.cola2 = tableB.colb1 
INNER JOIN tableC ON tableA.cola3 = tableC.colc1 
WHERE tableA.cola5 = 'something' 

那麼,是不是可以使用子查詢來寫這個查詢,而不是加入? 和什麼會更好?子查詢或JOIN? 我的一個朋友告訴我,當你有大表時,JOIN速度很慢,需要一臺強大的計算機,而子查詢速度更快,並且不需要強大的計算機來執行選擇。他說這是因爲子查詢返回的結果基於類似於加法的結果,並且基於乘法(我不擅長英語,因此我不知道如何放置這個,但希望你明白這一點)來重新獲得結果。我是新手,我嘗試過谷歌,但仍然無法理解。有人請抽空回答我的問題,並解釋這個子查詢vs JOIN對我來說?非常感謝你。

+0

MySQL查詢優化器將有可能把兩個連接和子查詢相同。如果性能是一個問題,只需確保連接的列是索引的。 – Owen

回答

0

在大多數情況下,JOIN比子查詢快,子查詢速度更快。

JOINs RDBMS可以創建一個更適合您的查詢的執行計劃,並且可以預測應該加載哪些數據進行處理並節省時間,與子查詢不同,它將運行所有查詢並將所有數據加載到做處理。

+0

謝謝你的回答。但我仍然不明白爲什麼人們建議我使用子查詢而不是聯接。你能告訴我如何使用子查詢重新編寫上面的Join(只是好奇如何編寫它並使其運行)。非常感謝你 – nvd

0

這樣來做:

Select cola1, cola2, cola3, cola4, cola5, colb2, colc2, colc3,colb1, colb2,colc1, colc2, colc3 FROM 
(Select cola1, cola2, cola3, cola4, cola5, colb2, colc2, colc3,colb1, colb2 FROM 
(Select cola1, cola2, cola3, cola4, cola5, colb2, colc2, colc3 FROM tableA) as A 
INNER JOIN 
(Select colb1, colb2 from tableB) as B 
ON A.cola2 = B.colb1)as AB 
INNER JOIN 
(Select colc1, colc2, colc3 From tableC) as C 
ON AB.cola3 = C.colc1 
WHERE AB.cola5 = 'something' 
+0

更新查詢..上面檢查它 –