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

Sql server SQL Server:如何优化此查询100000个查询+,sql-server,optimization,statistics,Sql Server,Optimization,Statistics,我需要做一些统计,这将形成一个新的结果表 我需要在三年内每隔一秒检查一次条件是否满足,然后插入结果 我可以使用带有seconds unixtimestamp或某种类型的自联接的现成表更有效地实现这一点吗 DECLARE @i int = 1356999800 WHILE @i < 1356999900 BEGIN insert into tablexxx (unixtimestamp, unit, activated, datum) select

我需要做一些统计,这将形成一个新的结果表

我需要在三年内每隔一秒检查一次条件是否满足,然后插入结果

我可以使用带有seconds 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)

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

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

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

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