一个明细表
uid orders money
1 1001 10
2 1002 5
3 2001 20
2 1002 10
2 1006 5
1 1001 11一个用户表
id name
1 账三
2 李四
3 老五请问如何设计用户的统计表
比如统计表需要统计明细表中的uid和orders相同的money累加起来,如下uid orders money
1 1001 21
2 1002 15
2 1006 5
3 2001 20如果明细表的数据上几百万笔,还有几万个用户。是否考虑到分表,还是有更好的方法设计表的结构。
uid orders money
1 1001 10
2 1002 5
3 2001 20
2 1002 10
2 1006 5
1 1001 11一个用户表
id name
1 账三
2 李四
3 老五请问如何设计用户的统计表
比如统计表需要统计明细表中的uid和orders相同的money累加起来,如下uid orders money
1 1001 21
2 1002 15
2 1006 5
3 2001 20如果明细表的数据上几百万笔,还有几万个用户。是否考虑到分表,还是有更好的方法设计表的结构。
但是如果有新添加一条数据到明细表,访问效果就变成和第一次一样了。大家都是用group by 来做统计吗。
是否还有更好的方法?
第一次很慢,第二次很快的原因是mysql有缓存,但是有新添加数据,缓存要更新就慢了。
我说得差分更新不知道你理解了没有。举个例子:
假如有100万条数据,通过GROUP BY生成以下统计表
uid orders money
1 1001 21000
2 1002 15000
2 1006 5000
3 2001 20000这个时候张三订购10元
uid orders money
1 1001 10那么统计表就变成
uid orders money
1 1001 21010(21000 + 10)
2 1002 15000
2 1006 5000
3 2001 20000更新语句就是,UPDATE 统计表 SET money = money + 10 WHERE uid = 1 AND orders = 1001
不需要每次都GROUP BY