2015-06-09 154 views
0

我的查詢運行速度太慢.....
有什麼方法可以加快速度?如何優化運行速度太慢的查詢(LEFT JOIN)

SELECT SQL_CALC_FOUND_ROWS a.*, b.*, c.*, d.*, e.*, f1.*, st6.* 
FROM tbl_a a 
LEFT JOIN tbl_b b ON a.m_id = b.m_id 
LEFT JOIN tbl_c c ON a.ms_id = c.ms_id 
LEFT JOIN tbl_d d ON a.gd_id = d.gd_id 
LEFT JOIN tbl_e e ON a.sd_id = e.sd_id 
LEFT JOIN tbl_f f1 ON a.tp_id = f1.tp_id 
LEFT JOIN 
     (
      SELECT g.*, GROUP_CONCAT(f2.tp_name SEPARATOR ',') tp_name, f2.tp AS tp 
      FROM tbl_g g 
      LEFT JOIN tbl_f f2 ON g.tp_id = f2.tp_id 
      GROUP BY s_id 
     )st6 ON st6.s_id = a.s_id 
+0

你能執行'EXPLAIN SELECT ....'嗎? –

+1

你能得到什麼'解釋選擇......'將結果分享到問題中。 –

+0

嘗試在語句前添加'EXPLAIN'或'EXPLAIN EXTENDED'關鍵字並查看其輸出以獲取可能的提示,或者如果您堅持使用它,請將結果更新爲您的問題,以便我們可以幫助您更多。 – kayess

回答

0

請勿使用LEFT,除非您有特定的原因。我在這裏看不到任何暗示。

像這樣的查詢是最佳優化的,如果它可以執行子查詢第一個。然而,'左'是暗示它不可能。刪除所有LEFT並查看它是否足夠快給出了「正確」的答案。

檢查以下兩個指示表中的gd_id上是否有PRIMARY KEYINDEX。 (和其他的JOIN也這樣做。)

JOIN tbl_d d ON a.gd_id = d.gd_id 

如果你還需要幫助,提供SHOW CREATE TABLE每個表。和EXPLAIN SELECT ...;