2011-09-21 76 views
1

我有以下查詢:由SUM非常緩慢排序

SELECT SUM(s.count) as count, a.name, s.author_id as id 
    FROM twitter_author_daily_stats s 
    JOIN twitter_author a ON s.author_id = a.id 
    WHERE s.`date` >= '2011-01-07' 
    AND s.`date` <= '2011-09-21' 
    AND s.profile_twitter_search_id IN (263) 
GROUP BY s.author_id 
    LIMIT 30; 

它使用一個索引(AUTHOR_ID,profile_twitter_search_id,日期);它很快(〜1s);它返回〜2500行。

但是,當我添加ORDER BY count時,查詢運行了幾分鐘(我沒有打擾等待它完成)。

不應該只從原始查詢中抽取〜2500行並按count列進行排序?爲什麼需要這麼長時間?

能有更好的MySQL知識的人解釋嗎?

+0

我認爲用'a.id'對結果進行分組會更好。 – Karolis

回答

1

甚至更​​好:讓MySQL解釋它,並使用正確名稱EXPLAIN關鍵字。

帶索引的優化只能在certainsituations中執行,而更改排序/分組/條件是很好地改變格局的好方法。

+0

我已經做到了,並沒有太大的幫助。使用ORDER BY,它使用臨時表和文件夾。沒有它它不會。儘管如此,它並不能解釋爲什麼它在合理的時間內不能排序2500行。當然,創建一個約2500行的臨時表並對其進行排序不會花費那麼長時間。內部有些奇怪的事發生在我不明白的地方。 –

+0

@Pawel:這很有幫助。沒有什麼「奇怪」的事情發生;你只是沒有通讀文件。除非你管理我在8分鐘內與你聯繫的兩個部分,這似乎不大可能。正如我所說的,除了排序結果之外還有更多的事情:這不是你的ORDER BY的意思。 –

+0

在發佈問題之前,我已經閱讀了這些頁面。我沒有找到解決方案。你是否說過我錯過了一個解決方案? –