2014-02-20 30 views
0

我有一個MySQL JOIN包括4個表:差異加盟連鎖和SELECT子查詢LEFT JOIN

直接鏈接

SELECT col1, col2, col3... col12 FROM 
    (((tbl1 LEFT JOIN tbl2...) LEFT JOIN tbl3 ...) LEFT JOIN tbl4); 

子選擇

(SELECT col10 .. col12 FROM 
    (SELECT col7 .. col9 FROM 
    (SELECT col1, ... col6 FROM tbl1 
      LEFT JOIN tbl2) AS J1 
      LEFT JOIN tbl3) AS J2 
       LEFT JOIN tbl4...) 

是這兩種方法之間存在效率差異?我的直覺是,子選擇使用SELECT ... WHERE子句放棄不必要的行和列,並使JOIN更快,內存更少。有什麼建議?其他數據庫如何?

回答

0

這將取決於您的表大小和查詢過濾的數據。

條件1: 如果您的表的大小是正常的(假設所有表具有約5000行),你從表中有任何filteration那麼不應該有兩個查詢中的任何差異,甚至第一個查詢可以提供更好的性能獲取數據。

條件2: 如果您的表具有龐大的數據,假設數十億行中的數據,但在過濾數據後,實際數據集假定接近約。低於100行,那麼第二個查詢可能會更好。

沒有硬性規定,您必須根據您的表格數據大小和您的要求以各種方式檢查您的查詢性能。拇指規則是,如果我們可以減少具有不同表的連接的數據大小,那麼它會提高性能。

0

它將取決於表格的大小,通常您的第一個查詢會比第二個查詢更快,因爲與第二個查詢相比,評估期間會少一些。