2
我必須監督的東西,但我有以下查詢:簡單的查詢需要長時間在MySQL
SELECT
`Poster`, Round(Sum(If((`Date`>=DATE_ADD(CURDATE(),INTERVAL -1 Month) And `Date`<CURDATE()),1,0))/DATEDIFF(CURDATE(),DATE_ADD(CURDATE(),INTERVAL -1 Month)),0) AS `statistics`
FROM `forenposts`
GROUP BY `Poster`
ORDER BY `statistics` DESC
LIMIT 5
這需要大約15秒有超過1.5萬個條目的數據庫。
有沒有一種簡單的方法來優化它,或者只是花費這麼長時間的If函數?
謝謝你,這降低了速度爲3.75秒。我不確定,如果有可能讓它低於這個水平。 – Spurious
順便說一句,我不確定,如果哪裏優化是正確的,是嗎?我把它從我的答案中刪除,你可以試試這個版本,如果它返回mase結果? – jpesout
結果是一樣的! 我想將其轉換爲PHP代碼,但我無法讓它工作。 這是我使用的代碼: $ stmt = $ conn-> prepare(「SET @CURDATE = CURDATE(); SET @PREVDATE = DATE_ADD(@CURDATE,INTERVAL - 」。$ timeperiod。「); SET @DIFF = DATEDIFF(@CURDATE,@PREVDATE); SELECT'Poster',Round(Sum(1/@DIFF),0)AS'statistics' FROM'forenposts' WHERE Date>> @ PREVDATE和'Date' <@CURDATE GROUP BY'Poster' ORDER BY'statistics' DESC LIMIT 5;「); – Spurious