2011-11-19 316 views
2

長時間讀者,第一次張貼海報。我有一個查詢(下面),當客戶有很多類別時,需要永遠運行。我需要加速它,我不知道如何。任何援助非常感謝。慢SQL查詢速度

SELECT pictures1.*, GROUP_CONCAT(cats_master.categoryName SEPARATOR ';') AS categoryNames 
      FROM pictures1 
       LEFT JOIN cats_contacts ON pictures1.id =cats_contacts.contact_id 
       LEFT JOIN cats_master ON cats_contacts.category_id = cats_master.id 
      WHERE pictures1.customer_id = (customer id goes here) 
      GROUP BY pictures1.id 
      ORDER BY pictures1.l_name ASC 

該查詢的結果是一個客戶可以下載的文件 - 問題似乎是類別片。

+1

'carddata'是什麼? –

+0

對不起馬克糾正。 – user1055739

回答

1

有以下指標將大大加速比查詢:

id, l_name, customer_id: pictures table 
contact_id: cats_contacts table 
id, category_id: cats_master table 
+0

感謝Raihan--對於圖片表格 - 你是在暗示這3個字段還是3個索引的索引?這部分對我來說有點混亂。 現在我有以下指標: cats_contacts:名稱:CATEGORY_ID字段:CATEGORY_ID,CONTACT_ID < - 設置爲一個指數,它看起來像,指數型獨特 cats_master:一個關於CUSTOMER_ID,一個在類別名稱(剛剛創建這個categoryName索引) - 索引類型正常 – user1055739

+0

(我已經嘗試了大約100次來修復這個評論的外觀,甚至閱讀幫助文檔,它仍然很難看。) – user1055739

+0

所有索引應該在單列上,根據您的查詢不需要組合索引。所以'圖片'表上的3個索引,'cats_contacts'上的1個,'cats_master'上的2個索引。如果任何列是主鍵,請將其設爲唯一索引。 – Raihan

3

檢查解釋計劃並在需要時添加索引。

0

我想嘗試所有的ID的指數,+ l_name爲最終排序。之後,這是堅韌不拔的時間。例如,你所有的「加入」ID都是相同的類型和大小。

PS查詢計劃說什麼。

和外部機會重建索引,看看是否有所作爲。

+0

謝謝託尼 - 不知道它是否重要,但解釋確實說「使用臨時文件,使用filesort」 – user1055739

+0

您可以將它添加到問題?那麼我們可能會給你更多的線索。 SQL性能調優和科學一樣是一門藝術 –