将大型数据库表折叠为每个用户一行

时间:2014-06-21 10:28:05

标签: mysql sql database

我正在运行一个赌场(不是真钱)网站,每当用户在一张桌子上玩一行时,就会生成一个赌场。" trans"在我的数据库上,使这个数据库增长太多,导致我的服务器崩溃

这是表结构

    Name        Type            Collation   Attributes          Null    Default     Extra       Action
 1  user_id     int(11)         No          None                Change  Change      Drop Drop    Browse distinct values Browse distinct values   Primary Primary     Unique Unique  Show more actions More
 2  amount      decimal(16,8)   No          None                Change  Change      Drop Drop    Browse distinct values Browse distinct values   Primary Primary     Unique Unique  Show more actions More
 3  aff         int(11)         No          0                   Change  Change      Drop Drop    Browse distinct values Browse distinct values   Primary Primary     Unique Unique  Show more actions More
 4  jackpot     int(11)         No          0                   Change  Change      Drop Drop    Browse distinct values Browse distinct values   Primary Primary     Unique Unique  Show more actions More
 5  paidout     int(11)         No          0                   Change  Change      Drop Drop    Browse distinct values Browse distinct values   Primary Primary     Unique Unique  Show more actions More
 6  type        int(11)         No          0                   Change  Change      Drop Drop    Browse distinct values Browse distinct values   Primary Primary     Unique Unique  Show more actions More
 7  created     timestamp       No          CURRENT_TIMESTAMP   Change  Change      Drop Drop    Browse distinct values Browse distinct values   Primary Primary     Unique Unique  Show more actions More

这个表实际上有400万行,只有30000个用户(user_id) 我的问题是,有没有办法折叠表每天说,每个用户只保存一行并保持其余额(金额)。

我正在尝试这个没有成功:

更新trans

SELECT * FROM trans group by user_id 设定金额=(从转移中选择总和(金额)

1 个答案:

答案 0 :(得分:0)

这里有一些广泛的步骤:

  1. 创建一个新的摘要表。
  2. 在原始表格上添加触发器以查找此用户,并在摘要表格中将该金额添加到其总计
  3. 清除所有旧条目
    1. 更改您的应用程序逻辑以执行更新而不是插入
    2. 你可以编写一个单独的GROUP BY样式查询来添加所有用户信息并返回而不是所有细节 - 可能你正在做的是选择*这耗尽了你所有的记忆..坏