在SQL中执行多次计算的时间平均的最快方法?

时间:2010-09-20 16:49:31

标签: sql sql-server time max average

我对在桌面上执行SQL Server查询的最快方法有疑问,TheTable包含以下字段:TimeStamp,Col1,Col2,Col3,Col4
我不维护数据库,我只能访问它。我需要执行10次类似的计算:

Col2*Col3 + 5       
5*POWER(Col3,7) + 4*POWER(Col2,6) + 3*POWER(Col1,5)       

然后我必须使用所选日期的数据找到计算结果的AVG和MAX(到目前为止,数据库中有8个月的数据)。由于数据每0.1秒采样一次,因此每次计算都会有864000行。我想确保查询尽可能快地运行。有没有比这更好的方法:

SELECT AVG(Col2*Col3 + 5), 
    AVG(5*POWER(Col3,7) + 4*POWER(Col2,6) + 3*POWER(Col1,5)), 
    MAX(Col2*Col3 + 5), 
    MAX(5*POWER(Col3,7) + 4*POWER(Col2,6) + 3*POWER(Col1,5)) 
FROM TheTable 
WHERE TimeStamp >= '2010-08-31 00:00:00:000' 
    AND TimeStamp < '2010-09-01 00:00:00:000'

谢谢!

3 个答案:

答案 0 :(得分:2)

您可以将这些列创建为计算(计算)列,并将Is Persisted设置为true。这将在插入时将计算值持久保存到磁盘,并对这些值进行后续查询非常快。

或者,如果您无法修改表架构,则可以创建一个Indexed View来为您计算值。

答案 1 :(得分:0)

当您插入数据而不是选择数据时,如何进行这些计算?然后,您只需要对这些值进行给定日期的计算。

TableName
---------
 TimeStamp
 Col1
 Col2
 Col3
 Col4
 Calc1
 Calc2
 Calc3

并插入如下:

INSERT INTO TableName (...)
VALUES
(...,AVG(@Col2Val*@Col3Val + 5),...)

答案 2 :(得分:0)

您唯一的选择是提前计算值,Computed Columns或视图中的持久列,请参阅此处Improving Performance with SQL Server 2005 Indexed Views。如果您无法更改数据库,则可以将数据从该数据库中提取到您自己的数据库中。只需在将列插入自己的数据库时计算列。然后从您自己的数据库中运行您的查询。