Sql server SQL Server:如何优化此查询100000个查询+
我需要做一些统计,这将形成一个新的结果表 我需要在三年内每隔一秒检查一次条件是否满足,然后插入结果 我可以使用带有seconds unixtimestamp或某种类型的自联接的现成表更有效地实现这一点吗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
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循环,只需获取完整的结果集并将其批量插入即可