【问题标题】:SQL Server : how can I optimize this query 100000 queries +SQL Server:如何优化这个查询 100000 个查询 +
【发布时间】:2015-01-05 01:54:52
【问题描述】:

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

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

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

【问题讨论】:

    标签: sql-server optimization statistics


    【解决方案1】:

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

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

    调用函数很可能会增加开销,即使它是一个小函数。标量函数并不以其优化而闻名。如果您需要 Unix 时间戳,也许可以另辟蹊径,为 DateTime 构建一个函数到 Unix 时间戳。或者构建一个映射表来执行 DateTime 和 UnixTimeStamp 字段,并将您的 Table2 连接到映射表以获取特定值。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-22
      相关资源
      最近更新 更多