2015-05-29 21 views
0

我有一個表,如下所示:如果需要逐行計算,如何提高選擇查詢的性能?

  • PK,
  • 日期,
  • 小時(0-23),
  • 事務ID(外鍵),
  • 價格,

有3年的數據(365x24x3 = 26280小時),爲每筆交易。而且,我現在有5000個(並且在不斷增長)。

我想每個小時(每26280)來計算加權平均(SUM(P_Transaction1xV_Transaction1 + P_Transaction2xV_Transaction2 + ... + P_Transaction5000xV_Transaction5000)/ SUM(V_Transaction1 + V_Transaction2 + ... + V_Transaction5000)。

我們嘗試下面的選項,但不能管理以減少運行時間顯著

選項1:

數據表: PK 日期 事務ID(外鍵) 價格1,Price2,...,Price24 VOLUME1,卷2,... Volume24

索引列:交易編號,使用日期 存儲過程。

選項2:

數據表1: PK 日期 小時(0-23) 事務ID(外鍵) 卷

數據表2: PK 日期 小時(0-23) 交易ID(外鍵) 價格

索引列:事務ID,日期,小時 使用存儲過程。

選項3: 正如我在開始時解釋的那樣。

我想知道是否有一個更好的方法,只要數據模型,索引或...等等。爲了儘可能提高性能。

+2

選項1,24個價格欄和24個卷欄是一團糟。躲開它! – jarlh

+2

你正在使用哪些DBMS!? – CeOnSql

+0

Microsoft SQL Server 2008企業版(64位) – hedeDN

回答

2

既然你正在試圖找出「每個小時」的集合,你的出發點應該是一個group by date, hour

select date, hour, sum(price * volume)/sum(volume) 
from table 
group by date, hour 

有(日期,小時),或至少日期索引,會有所幫助。

+0

具體爲:CREATE INDEX ix_temporal ON表(日期,小時)INCLUDE(價格,音量) – Caleth