2013-04-28 2 views
1

У меня есть таблица в БД MySQL, где регистрируются определенные события. Теперь я хочу знать, какое событие произошло бы в последний час для определенного домена объекта:MySQL: ORDER BY или GROUP BY slow?

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

Попробуйте добавить индекс на 'time' или еще лучше, на' domain_id, event_type, time, entity_id' –

+0

@The Scrum Meister: Можете ли вы поместить этот комментарий в ответ. (Просто добавление индекса для 'time' ускорило запрос в 100 раз ...) – EricSchaefer

+1

Имена типа' number' и 'time' делают меня зудом из-за различных диалектов SQL. Я бы назвал поле «время». _ (Нет критики) _ –

ответ

0

Редактировать таблицу и создать индекс в домене_ид, event_type.