如果需要逐行计算,如何提高选择查询的性能?

时间:2015-05-29 07:41:13

标签: sql sql-server performance procedure

我有一张表格如下:

  • PK,
  • 日期,
  • 小时(0-23),
  • 交易ID(外键),
  • 价钱,

每笔交易都有3年的数据(365x24x3 = 26280小时)。而且,我现在有5000个(并且还在增长)。

我正在尝试计算每小时的加权平均值(SUM(P_Transaction1xV_Transaction1 + P_Transaction2xV_Transaction2 + ... + P_Transaction5000xV_Transaction5000)/ SUM(V_Transaction1 + V_Transaction2 + ... + V_Transaction5000)(每个26280)。

我们尝试了以下选项,但无法显着缩短运行时间。

选项1:

数据表: PK 日期 交易ID(外键) 价格1,价格2,...,价格24 第1卷,第2卷,...第24卷

索引列:交易ID,日期 使用存储过程。

选项2:

数据表1: PK 日期 小时(0-23) 交易ID(外键) 体积

数据表2: PK 日期 小时(0-23) 交易ID(外键) 价

索引列:交易ID,日期,小时 使用存储过程。

选项3: 正如我在开始时所解释的那样。

我想知道对于数据模型,索引等等是否有更好的方法。为了尽可能地提高性能。

1 个答案:

答案 0 :(得分:2)

由于您要查找“每小时”的汇总数,因此您的起点应为group by date, hour

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

索引(日期,小时)或至少日期会有所帮助。