我在我的web-app中使用下面的查詢。它查詢的是結果表格,其中包含網絡商店在給定時間的價格。它有大約100萬條記錄。索引是一個shopID,StartTime,pID和WebsiteID。簡單,索引良好,MySQL查詢大約需要一秒鐘
查詢:
SELECT shopID, tresults.StartTime, tresults.Price
FROM tresults
WHERE tresults.pID = 7
AND WebsiteID = 1 AND StartTime BETWEEN "2013-4-10" AND "2013-4-11"
AND tresults.shopID IN (44, 68, 23, 16, 144, 8, 9, 5)
GROUP BY tresults.StartTime, tresults.Price
ORDER BY tresults.StartTime, tresults.Price
的解釋結果:
1, SIMPLE, tresults, index_merge, PRIMARY,idxPID,idxWebsite,idxStartTimeASC,idxStartTimeDESC,fk_shopID, idxPID,idxWebsite, 4,4, , 1062, Using intersect(idxPID,idxWebsite); Using where; Using temporary; Using filesort
看起來好像沒什麼問題,但還是查詢需要大約一秒鐘來完成。這在快速網站中是不可接受的。
我該如何加快速度?
注:速度看起來是依賴於shopID的
感謝的數量!
你沒注意到tresults.pID = 7時提到兩次?從這些百萬行中選擇了多少行?你爲什麼分組?排序應該是足夠的... – rene
pID = 7不應該在那裏兩次(雖然在性能上沒有差別)。它從這些百萬人中選擇了大約500行。分組在那裏,因爲我認爲這是我從結果中創建的圖表所必需的。刪除它不會使性能不同,不幸的是。 – kay10