存储计算结果与在运行时进行计算的标准

时间:2011-08-29 16:04:10

标签: mysql optimization mysql-management

我的一位客户是高尔夫球场。他们每隔几周就会提出一个新的统计数据,他们希望在各种报告中提供各种轮次并涵盖所有轮次。

例如,在距离不足10英尺时尝试推杆的百分比与错过的比率。

一些参数:

  1. 报告查看比新记录条目更频繁发生
  2. 报告需要尽快运行,这比快速保存更优先
  3. 一轮中的每个洞都有记录
  4. 每轮都有记录
  5. 每位用户都有一份终身统计记录
  6. 我们每轮存储超过250个单独的数据点(包括孔记录)
  7. 统计页面显示约100个个人计算
  8. 我目前的做法是在需要新的统计数据时向洞/圆/终身统计表添加字段,并在每次保存回合时计算统计数据。

    问题是在某些时候我们可能会超过mySQL的最大行大小65535字节。

    所以,问题是:

    1. 我是否应该开始计算统计数据而不是存储它们?
    2. 或者我应该只计划添加新的统计表来保存溢出?

1 个答案:

答案 0 :(得分:0)

如果您在dateholeuserround字段上有索引,则应该花很少的时间来计算最新统计信息。

SELECT s.*           
       , 1 - perc_missed as perc_hit
FROM (
  SELECT IFNULL(putts_missed / total_putts,1) as perc_missed
         ,player
         ,hole 
  FROM golf_stats gs
  WHERE gs.playdate BETWEEN '2011-01-01' AND '2011-02-01'
  GROUP BY gs.player, gs.hole ) AS s;