1

我有一个关于在表 TheTable 上执行 SQL Server 查询的最快方法的问题,该表具有以下字段:TimeStamp、Col1、Col2、Col3、Col4
我不维护数据库,我只是可以访问它。我需要执行 10 次类似于以下的计算:

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

然后我必须使用选定日期的数据(到目前为止数据库中有 8 个月的数据)找到计算结果的 AVG 和 MAX。由于每 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'

谢谢!

4

3 回答 3

2

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

或者,如果您无法修改表架构,您可以创建一个索引视图来为您计算值。

于 2010-09-20T16:56:05.193 回答
0

在插入数据而不是选择数据时进行这些计算怎么样?然后,您只需在给定日期对这些值进行计算。

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

并像这样插入:

INSERT INTO TableName (...)
VALUES
(...,AVG(@Col2Val*@Col3Val + 5),...)
于 2010-09-20T16:53:43.543 回答
0

您唯一的选择是提前计算值,无论是计算列还是视图中的持久列,请参阅此处使用 SQL Server 2005 索引视图提高性能。如果您无法更改数据库,您可以将该数据库中的数据提取到您自己的数据库中。只需在将列插入自己的数据库时计算列。然后从您自己的数据库中运行您的查询。

于 2010-09-20T17:12:28.170 回答