400万级数据的触发器效率问题

时间:2022-11-25 21:22:59
一张电能明细表tbl_energy用于统计电表的用电信息,远程抄表每小时读电表一次,总共约5000块电表,每月的数据=30*24*5000=360万。因为考虑到后续统计方便,在插入某个电表的读数时做了一个触发器查询该电表上一次的读数,并放在这次记录的last_reading字段里面。想问一下有经验的朋友这种设计是否合理,400万记录做这种触发器是否导致速度很慢,因为5000条插入动作要在一个小时内完成。
另外,我每天晚上还要做一次所有电表的日用电统计,然后插入到另外一张统计表中,所以我担心一个小时的间隔是否够用。
请专家指点一下,上述设计是否可行,有无更好的方案?

11 个解决方案

#1


做分區表吧.
不過一個月300多完記錄不是很多.可以把一年的記錄放在一個表中.

#2


lz可以自己测试下速度,应该没问题。个人感觉没必要保存上一次的读数,当然这和具体业务相关,具体情况具体分析。

#3


看楼主的意思,应该是用数据库作业(JOB).
可以参考一下这个:
http://blog.csdn.net/sdhdy/archive/2009/04/26/4126359.aspx

#4


http://topic.csdn.net/u/20090610/13/fb0795db-d91a-4ffb-8ae2-26b52e15db21.html

#5


学习

#6


用作业。。。参考的文章见3楼 

#7


关键在于你查询上次所依据的条件必须能用到高效索引,这样触发器处理高效了,影响就小了

#8


有两位说道用作业,请问所说的作业用于做什么?是查询上次的读数,还是做日用电量的统计?

#9


应该不会有问题,因为查询条件设置影响的行数只有很少一部分,只要表索引能够很快定位这条记录就行了。

#10


作业就是定时执行的SQL语句,应该指日用电量的统计。查询是不对数据加锁的,不会对数据操作造成太大的影响,另外,我觉得最好不要用触发器,直接用存储过程负责插入数据就行了,先查询上次电表抄表值,然后一直插入,这样查询的时候会好查些,而且只要一次插入过程。

#11


在这种级别的数据库上使用触发器是有风险的。
楼主可以采用别的方式。

类似于TONY所说的数据库作业。

#1


做分區表吧.
不過一個月300多完記錄不是很多.可以把一年的記錄放在一個表中.

#2


lz可以自己测试下速度,应该没问题。个人感觉没必要保存上一次的读数,当然这和具体业务相关,具体情况具体分析。

#3


看楼主的意思,应该是用数据库作业(JOB).
可以参考一下这个:
http://blog.csdn.net/sdhdy/archive/2009/04/26/4126359.aspx

#4


http://topic.csdn.net/u/20090610/13/fb0795db-d91a-4ffb-8ae2-26b52e15db21.html

#5


学习

#6


用作业。。。参考的文章见3楼 

#7


关键在于你查询上次所依据的条件必须能用到高效索引,这样触发器处理高效了,影响就小了

#8


有两位说道用作业,请问所说的作业用于做什么?是查询上次的读数,还是做日用电量的统计?

#9


应该不会有问题,因为查询条件设置影响的行数只有很少一部分,只要表索引能够很快定位这条记录就行了。

#10


作业就是定时执行的SQL语句,应该指日用电量的统计。查询是不对数据加锁的,不会对数据操作造成太大的影响,另外,我觉得最好不要用触发器,直接用存储过程负责插入数据就行了,先查询上次电表抄表值,然后一直插入,这样查询的时候会好查些,而且只要一次插入过程。

#11


在这种级别的数据库上使用触发器是有风险的。
楼主可以采用别的方式。

类似于TONY所说的数据库作业。