【发布时间】:2012-02-20 01:02:16
【问题描述】:
我有一个对时间数据运行模拟的应用程序。计算并不过分复杂,但计算需要在同一模拟中预先预测的时间数据。
假设使用 1 周的数据进行模拟,数据点的间隔为 15 分钟。预测值的简化计算如下:
PredictedValue = A + B + C + D
要获得 B、C 和 D 的值,模拟需要先前计算的 t0、t-1、t-95、t-96、t-672 和 t-673 处的数据。这是当前和前一个间隔、前一天的当前和前一个间隔以及前一周的当前和前一个间隔的时间数据。
我有一个可以模拟任何时间段的数据的有效实现,但是对于大型数据集,性能极差。
该实现使用 TSQL 游标循环模拟下的时间数据,并使用标量函数检索先前计算的数据。
基本上,数据集越大,模拟运行的速度就越慢。例如,使用 1 天数据的模拟需要
我对如何在不使用游标或标量函数的情况下提高 TSQL 代码的性能非常感兴趣。
【问题讨论】:
-
为您现有的实现分享一些代码。我们可以帮助您使用集合而不是游标来重写它
-
你能发布一些你的代码吗?
-
日期/时间的性能问题通常与索引(或缺少索引)以及在 WHERE 子句中不当使用函数有关。如果您强制数据库引擎将函数应用于表中的每一行,例如WHERE YEAR(DATE_COL) > 2000,您会看到性能随着表的增长而下降。
-
今天晚些时候我会发布一些代码。
标签: sql-server performance tsql cursor sql-server-2008-r2