我在下面有一個sql,它運行了大約30分鐘,這對我來說太長了。在MySQL中查詢SQL運行速度很慢
SELECT LPP.learning_project_pupilID, SL.serviceID, MAX(LPPO.start_date), SUM(LPPOT.license_mode_value) totalAssignedLicenses
FROM t_services_licenses SL
INNER JOIN t_pupils_offers_services POS ON POS.service_licenseID = SL.service_licenseID
INNER JOIN j_learning_projects_pupils_offers LPPO ON LPPO.learning_project_pupil_offerID = POS.learning_project_pupil_offerID
INNER JOIN j_learning_projects_pupils LPP ON LPPO.learning_project_pupilID = LPP.learning_project_pupilID
INNER JOIN j_learning_projects_pupils_offers_tracking LPPOT ON LPPOT.pupil_offer_serviceID = POS.pupil_offer_serviceID
INNER JOIN t_filters_items FI ON FI.itemID = LPP.learning_project_pupilID_for_filter_join
WHERE FI.filterID = '4dce2235-aafd-4ba2-b248-c137ad6ce8ca'
AND SL.serviceID IN ('OnlineConversationClasses', 'TwentyFourSeven')
GROUP BY LPP.learning_project_pupilID, SL.serviceID
的解釋如下結果(告訴我,如果你不能查看圖像):
http://images0.cnblogs.com/blog2015/47012/201508/140920298959608.png
我觀看了輪廓的結果,「複製臨時數據」浪費了幾乎所有的時間。我知道原因是由「group by」功能引起的,所以我在下面做了一些更改以驗證它: 我刪除了MAX,SUM函數以及Group By sql並運行它,時間僅需要大約40秒,這對我們是好的。 所以在這裏,我想知道,如果還有其他一些方法讓上面的sql執行速度更快?
更多信息,你可以在這裏找到:http://www.cnblogs.com/scy251147/p/4728995.html
編輯: 從解釋來看,我可以看到,在t_filters_items表,大約有50802行過濾,而這個表不幸運的是使用臨時存儲臨時數據,這對我來說不是一個好選擇。我非常不喜歡MySQL中的「Group By」。
解釋顯示至少兩個正在使用索引的JOINS。請在此處添加您的解釋,請 –
@ BK435,解釋附。 –
@JorgeCampos附加說明。 –