如何快速统计出某段时间内的记录总数

我们经常在项目中遇到的需求就是计算在一周内的记录总数,而且这个数目是需要在列表页出现的,所以用SELECTCOUNT显然不合适。但是如果你用缓存来做的话,因为这个值是根据你的当前时间不断在变的,比如用户在下午14:10来访问这个页面,那么我们要计算的就是从7天前的14:10到现在这段时间内的记录总数。这是不可能缓存的,我不知道各位是怎么设计的。我有一个思路就是,还是用SELECTCOUNT来统计,但是把它缓存住,一个小时更新一次。看起来解决的还可以,不知道各位有什么更好的思路,比这个准确度更高的。
呼啦一阵风
浏览 371回答 2
2回答

湖上湖

你要不创建一个trigger和一张表用来记录行数,如果你的入数据库的量不大的话。比如ONINSERTUPDATEcounterSETtable_name_count=table_name_count+1;然后前台读取的时候从那张表读就是了。不过也要看你用的是什么SQL了,MySQL的MyISAM对这个问题是做了优化的;就直接SELECTCOUNT就是了。

杨__羊羊

维护一个队列,队列的每个元素是记录产生的时间:1.每当一个新纪录产生时,入队。更新队列的元素总数。2.每当来一次查询的时候,计算起始时间t,将所有小于t的记录出队。更新队列的元素总数。返回队列的元素总数。优点:高效、精确。缺点:占用一定的内存,对于100万个元素需要约4MB的内存空间。p.s.这个算法可以很容易地用mysql表来实现。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript