Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQL中执行多个计算的时间平均的最快方法?_Sql_Sql Server_Time_Max_Average - Fatal编程技术网

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

在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秒对数据进行一次采

我有一个问题,关于在具有以下字段的表(表)上执行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秒对数据进行一次采样,因此每次计算中会有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新手-这些列会成为表的永久部分吗?我应该提到这是一个我不维护的数据库。是的,他们会的。看我的第二个建议。非常感谢。一旦我学会了如何创建索引视图,我将发布代码。