У меня проблема с большой таблицей в базе данных приложения RoR.
TABLE EVENTS
:
create_table "events", :force => true do |t|
t.integer "id"
t.integer "device_id"
t.string "data_type"
t.integer "element_id"
t.t.datetime "created_at"
end
Проблема в том, что я хочу найти запись в этой таблице по этому запросу:
SELECT SQL_NO_CACHE `events`.* FROM `events`
WHERE `events`.`device_id` = N AND `events`.`data_type` = 'S'
AND (`events`.`created_at` BETWEEN 'S' AND 'S')
ORDER BY events.created_at DESC LIMIT 1
Я хочу взятьпоследнее событие дня, поэтому упорядочите записи по created_at
и выберите первый элемент.
К сожалению, операция сортировки стоит слишком дорого, тогда запрос выполняется слишком медленно.
MySQL долженсделать дополнительный проход, чтобы узнать, как получить строки в отсортированном порядке.
Sorting result 7.1760s 7.2565s 1176 8080 0 0