SQL Server:如何优化此查询100000个查询+

时间:2014-11-08 08:50:49

标签: sql-server optimization statistics

我需要做一些统计数据,这些统计数据将创建一个包含结果的新表

如果符合条件,我需要在三年内检查每一秒,然后插入结果。

我可以使用带有秒(unixtimestamp)的现成表或某种类型的自联接来更有效地执行此操作吗?

DECLARE @i int = 1356999800

WHILE @i < 1356999900 
BEGIN
    insert into tablexxx (unixtimestamp, unit, activated, datum)
       select 
          @i as unixtimastamp, '243-1080' as unit, 
          count(*) as activated,
          dbo.UNIX_TIMESTAMP_TO_DATETIME(@i) as datum
       from 
          table2 
       where 
          table2.date <= dbo.UNIX_TIMESTAMP_TO_DATETIME(@i) 
          and table2.date2 >= dbo.UNIX_TIMESTAMP_TO_DATETIME(@i)

1 个答案:

答案 0 :(得分:0)

如果表上的本机数据类型是DateTime,我想我会避免在While循环的每次迭代中对函数进行整数转换。

在DateTime字段和您需要计算的任何字段上放置索引。如果需要使用while循环,请在其本机数据类型的索引字段上执行此操作。将变量更改为DateTime并执行DATEADD(SECOND,1,@ i)

调用该函数很可能会增加开销,即使它的函数很小。标量函数的优化并不为人所知。如果你需要Unix TimeStamp,也许可以采用另一种方式为DateTime建立一个函数到Unix时间戳。或构建一个映射表来执行DateTime和UnixTimeStamp字段并将Table2加入到映射表中以获取特定值。

您可以完全避免使用while循环,只需拾取完整的结果集并批量插入。