2013-04-01 70 views
1

我有以下工作選擇查詢(實際的查詢是巨大的許多連接) 主查詢:MySQL的高效選擇查詢(使用加入或不)

SELECT id FROM job LIMIT 20 

當用戶登錄時,我想選擇用戶是否保存了該作業。 (許多用戶,但一個主要結果)

我的問題是更有效的方法?
方法1(在查詢緩存,緩衝池等方面思考):

SELECT id, Member 
FROM job AS t1 LEFT JOIN Member AS t2 ON (t1.id=t2.Job) LIMIT 20 

(即,如果用戶沒有保存工作,將返回「零」的選擇會員)

方法2 :
使用主查詢的主要結果,然後爲每個結果選擇(即環SQL查詢)

SELECT Member FROM Member WHERE Member=1 AND Job=(each job id) 

回答

0

一般來說,它是更有效的捆綁成一個單一的查詢,以減少往返噸數據庫,查詢解析成本等。但是,如果綁定到單個查詢意味着返回一堆您不需要的數據,那麼它可能不會比單個查詢更有效。

0

帶左連接的方法幾乎可以保證更高效。

雖然底層邏輯本質上是相同的(即:您將相同的列與相同的值進行比較),而使用LEFT JOIN解析時,LEFT JOIN查詢的分析成本更高,但僅限於對服務器進行1次往返訪問,而循環查詢則進行多次往返以實現相同的結果。

一般來說,很難給出這樣的問題的廣義答案,因爲它的大部分取決於您的特定設置和數據,但在這種情況下,您應該看到單個LEFT JOIN查詢顯着更快。

我在過去使用LEFT JOIN方法進行基準測試的速度一直很快。