一对多取最新sql求解?

需求是这样,由一张设备表,字段由id,name , state等信息
一张设备记录表,记录了设备得设备id、功率、温度、请求得时间戳
数据记录是每5s同步一下,所以数据量是比较大得,能达到百万
然后要求是 设备与设备记录表关联,取设备记录最近时间得一条,得到设备最新得温度功率
求一个性能比较优得,子查询效率太慢了

目前查到了一个比较巧妙得办法,通过内连接,很妙
select from (select from air_conditioner_record order by req_timestamp desc) as r group by air_conditioner_id order by req_timestamp desc


回答:

已经找到可行sql

SELECT

r.air_conditioner_id,

r.curr_temp,

r.curr_power,

r.time_millis

FROM

air_conditioner_record r,

( SELECT air_conditioner_id, max( time_millis ) max_time FROM air_conditioner_record WHERE time_millis <= REPLACE(unix_timestamp(now(3)),'.','') GROUP BY air_conditioner_id ) r2

WHERE

r2.air_conditioner_id = r.air_conditioner_id

AND r2.max_time = r.time_millis


回答:

大数据量最怕联表查询

建议设备表单独查询,然后根据需求,循环获取设备记录最新一条的数据,这样性能最优

具体建议题主可以测试跑下性能比较


回答:

感觉这个从sql中解决这个问题不好,除非你这数据会迁移,你现在是百万,等到千万的时候又是另一种情况了,而且这个你也要考虑设备的数量,是一次性查所有设备,还是分页查设备。
建议还是同步数据时候处理下,维护到一个缓存里面去。


回答:

直接在你的设备表后面加上功率、温度、请求得时间戳字段,往明细表插入时,同时更新一下。后期查询时只查设备表
通过触发器或程序去更新一下。

以上是 一对多取最新sql求解? 的全部内容, 来源链接: utcz.com/p/944924.html

回到顶部