我对在桌面上执行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'
谢谢!
答案 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。如果您无法更改数据库,则可以将数据从该数据库中提取到您自己的数据库中。只需在将列插入自己的数据库时计算列。然后从您自己的数据库中运行您的查询。