PHP开发 加入小组

298个成员 3006个话题 创建时间:2011-05-30

在做用户订单统计时遇到的效率问题

发表于 2012-02-07 2450 次查看

现在我有一个 140万左右的用户表

然后订单分散在382张订单表里面(1个店铺一个订单表),单张表最多有200+万条数据,保存着09,10,11年的历史订单信息

现在的需求是 计算出每个用户分别在09,10,11年的消费总额和订单笔数

遇到的问题:我写了一个脚本,每次读取一批用户,然后循环从382张表里面来计算,最后一个晚上只统计出来了700个用户。总数有100多万呀,太慢了。往请教。 

5回复
  • 2楼 jason 2012-02-07

     后来发现之前的订单表有些字段没有建索引,建立索引后,速度变快很多了。

  • 3楼 kent 2012-02-07

    索引是解决即时查询的好办法。

    这种设计,我有个建议:让机器在晚上跑起来,然后冗余存储。当然,这个也只能是产品设计上许可。

    如果是需要即时,考虑建立冗余表,然后在冗余表上建立索引。

  • 4楼 jason 2012-02-07

    嗯,上午我们采取的可能就是你说的冗余表的方式。我们先通过将382张表的数据按照年份分别放入到了三张表。后来每次只要从这三张表查询了。

  • 5楼 kent 2012-02-07

    大概思路:

    非即时的,晚上任务跑起来,根据需求,把计算结果存到一张冗余表里去。比如冗余一张表:年份,用户,订单笔数,消费总额。

     

    即时的冗余表设计:时间,用户,金额,订单id。 在下订单的时候冗余存储,然后针对性的索引。这样可以有效的把IO分散出来。

     

     

  • 6楼 jason 2012-02-07

    嗯,学习了。谢谢kent.

发表回复
功能维护升级中,维护完成完后将再次开放,非常抱歉给您学习造成的不便。