一对多取最新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