Sql 排序查询结果太慢
我对RoR应用程序数据库中的一个大表有问题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
表格事件
:
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时间窗口变短!但是制作索引是非常有用的