2013-04-28 105 views
1

我有一個表中的某些事件記錄在MySQL DB中。我現在想知道哪些事件發生在最後一小時中至少有一定實體域:MySQL:ORDER BY或GROUP BY慢?

SELECT entity_id, COUNT(entity_id) number 
FROM event_log 
WHERE domain_id=%s AND event_type='%s' AND time>DATE_SUB(NOW(), INTERVAL 1 HOUR) 
GROUP BY entity_id 
ORDER BY number ASC; 

這個查詢需要大約3秒一表約300.000行。有沒有辦法加速它顯着?難道我做錯了什麼?

+7

嘗試在''時間'或更好的'domain_id,event_type,time,entity_id'上添加一個索引 – 2013-04-28 11:42:31

+0

@ The Scrum Meister:您可以將該評論置於答案中。 (只是爲'時間'添加一個索引,將查詢速度提高了100倍...) – EricSchaefer 2013-04-28 12:02:49

+1

像'數字'和'時間'這樣的名稱讓我很癢,因爲SQL語言不同。我會現場引用'時間'。 _(沒有批評者)_ – 2013-04-28 12:10:21

回答

0

編輯表並在domain_id,event_type上創建索引。