在SQL中执行多个计算的时间平均的最快方法?
我有一个问题,关于在具有以下字段的表(表)上执行SQL Server查询的最快方法:TimeStamp、Col1、Col2、Col3、Col4在SQL中执行多个计算的时间平均的最快方法?,sql,sql-server,time,max,average,Sql,Sql Server,Time,Max,Average,我有一个问题,关于在具有以下字段的表(表)上执行SQL Server查询的最快方法:TimeStamp、Col1、Col2、Col3、Col4 我不维护数据库,我只是可以访问它。我需要进行10次计算,类似于: Col2*Col3 + 5 5*POWER(Col3,7) + 4*POWER(Col2,6) + 3*POWER(Col1,5) 然后,我必须使用所选日期的数据(到目前为止,数据库中有8个月的数据)找到计算结果的平均值和最大值。由于每0.1秒对数据进行一次采
我不维护数据库,我只是可以访问它。我需要进行10次计算,类似于:
Col2*Col3 + 5
5*POWER(Col3,7) + 4*POWER(Col2,6) + 3*POWER(Col1,5)
然后,我必须使用所选日期的数据(到目前为止,数据库中有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'
选择平均值(Col2*Col3+5),
平均值(5*功率(Col3,7)+4*功率(Col2,6)+3*功率(Col1,5)),
最大值(Col2*Col3+5),
最大功率(5*功率(Col3,7)+4*功率(Col2,6)+3*功率(Col1,5))
从表格
其中时间戳>='2010-08-31 00:00:00:000'
时间戳<'2010-09-01 00:00:00:000'
谢谢 在插入数据而不是选择数据时进行这些计算如何?然后,您只需在给定的一天对这些值进行计算
TableName
---------
TimeStamp
Col1
Col2
Col3
Col4
Calc1
Calc2
Calc3
并如此插入:
INSERT INTO TableName (...)
VALUES
(...,AVG(@Col2Val*@Col3Val + 5),...)
您可以将这些列创建为计算(computed)列,并将
Is persistence
设置为true。这将在插入时将计算出的值持久化到磁盘,并对这些值进行快速的后续查询
或者,如果无法修改表架构,则可以创建一个用于计算值的表。您唯一的选择是提前计算值,或者在视图中保留列,请参见此处。如果无法更改数据库,可以将该数据库中的数据拉入自己的数据库。只需在将列插入自己的数据库时计算它。然后在自己的数据库上运行查询。这是一个很好的建议,但我应该提到,这实际上不是我的数据库,因此我不确定数据库管理员是否希望我修改它。计算也经常改变。如果你必须进行计算,你必须进行计算。如果您不能在insert上执行此操作,您可以选择在select上执行此操作,或者在选择所有内容后在代码中执行此操作。我是SQL新手-这些列会成为表的永久部分吗?我应该提到这是一个我不维护的数据库。是的,他们会的。看我的第二个建议。非常感谢。一旦我学会了如何创建索引视图,我将发布代码。