2011-08-29 73 views
0

我的一位客戶是高爾夫球場。他們每隔幾周就會提供一份新的統計數據,並在各輪報道中提供,並涵蓋所有輪次。存儲計算結果與在運行時進行計算的標準

例如,在距離10英尺以下的地方嘗試時,推杆的比例與錯過的比例有關。

的一些參數:發生

  1. 報告收看往往比新的記錄條目
  2. 報告需要儘可能快地運行,這比快速保存
  3. 每個孔在一輪更高的優先級有記錄
  4. 每一輪都有記錄
  5. 每個用戶都有一個生活狀態記錄
  6. 我們有s每輪toring超過250個獨立的數據點(包括孔記錄)
  7. 的統計信息的網頁上顯示大約100個人計算

我的當前方法是將字段添加到孔/輪/壽命統計表作爲新的統計信息是並且每次保存一輪時計算統計數據。

問題是,在某些時候,我們可能會超過mySQL的最大行大小65535字節。

所以,問題是:

  1. 有一個地步,我應該開始在飛行計算統計數據,而不是將它們存儲?
  2. 或者我應該只是計劃添加新的統計表來保存溢出?
+0

請告訴我你是**不是**將所有數據存儲在一張大表中。請參閱:http://databases.about.com/od/specificproducts/a/normalization.htm – Johan

+0

大約有45個表格。用戶,球場,發球臺,回合,洞,統計都有表格。所有表格都根據需要自動增加主索引和引用外鍵,例如rounds reference userid;圓孔引用;發球臺引用courseid等 – jerrygarciuh

+0

也橋接表使用,如教練對學生(多對多)的需要, – jerrygarciuh

回答

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;