2015-05-29 46 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