假设有一张用户资金流水表A,有以下几个字段
id, user_id, current_money, change_money, create_time
例如我需要查询2017年11月12日0点0分0秒的所有用户的余额总额,目前的逻辑就是去根据资金流水表去查询每一个用户小于这个时间点的最后一条记录,然后current_money+change_money就是该用户在这个时刻点的余额,然后根据这个去累加每个用户的余额得到总余额,但是由于用户数量有上百万,并且本身这张表数据量也非常巨大。
1.该查询是否可以用一句sql语句搞定
2.是否有更好的统计逻辑
create_time,user_id加个联合索引,求总额sql如下:
然后就说说你的业务逻辑问题了,这种总额问题肯定是要单独的统计表来维护的,
每天的交易额,进账、出账,每次统计一天就很简单了,
总额统计逻辑:前一天的余额总额+今天的额度变化=今天的余额总额
这样的话只需要最开始全表统计一次即可,后面增量按照时间筛选统计性能不会差的,
最后就是这种交易流水表要分表的吧,按时间或者用户id分表即可,历史数据还可以另外存储