Sql 排序查询结果太慢

Sql 排序查询结果太慢,sql,ruby-on-rails,sql-order-by,Sql,Ruby On Rails,Sql Order By,我对RoR应用程序数据库中的一个大表有问题 表格事件: 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_C

我对RoR应用程序数据库中的一个大表有问题

表格事件

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
我想拍摄一天中的最后一个事件,因此请按处创建的
对记录进行排序,然后选择第一个元素

不幸的是,排序操作成本太高,查询速度太慢

MySQL必须做一个额外的过程来了解如何按排序顺序检索行

Sorting result  7.1760s 7.2565s 1176    8080    0   0

您可以维护一个事件汇总表,从中获取数据?使用触发器填充它以填充汇总表。EVENT_摘要表只包含最新行或指向最新行的指针,因此您根本不需要在查询中进行排序。我已经在一张大约有8000万行的桌子上很好地使用了这个功能,而且效果很好

要考虑的是,触发器在插入额外的工作时会在插入中引起性能问题。

取决于有多少分解器,汇总表可能不是最好的方法


里面有多少数据?它多长时间写入一次(每个分解器)?

您有关于
事件的索引吗?在
创建?您有什么索引?索引有助于分拣成本,但您需要考虑所需的顺序和在WHERE子句中应用的筛选器。代码>(设备id,数据类型,在DESC创建)
将是一个很好的索引,但非常关注这个查询。我有解决方案。。。。。我需要修改查询并使che时间窗口变短!但是制作索引是非常有用的