T-SQL使用表变量或对父表的总和

时间:2011-06-21 13:05:33

标签: performance tsql

场景是这样的,我正在创建一个日志表,一旦说完所有就会变得非常大并且我想创建一个状态表,它将从具有不同日期范围的表中查询并对结果求和分成多个总字段。

我计划将其写入存储过程但我的问题是,在执行求和操作之前,我会从日志表中读取所有记录到临时表中获得最佳性能。

IE我有这张表:

SummaryValues
90DayValues 
60DayValues
30DayValues
14DayValues
7DayValues
1DayValues

在接下来的90天中取出所有值然后将它们插入表值然后在我的汇总表中计算我的6个字段的总和或者执行6个总和的速度是否合理是合乎逻辑的日志表中的语句?

1 个答案:

答案 0 :(得分:1)

有时你最好先阅读临时表。有时不是。如果您对同一数据进行多次处理,则这是有意义的

但是,如果您想要“过去90天”,“过去60天”等,那么可以在一个查询中完成

再次阅读问题,我只需运行一个查询并一次性计算所有值。而且不打扰任何中间表

SELECT
  Stuff, 
  SUM(CASE WHEN dayDiff <= 90 THEN SomeValue ELSE 0 END) AS SumValue90, 
  SUM(CASE WHEN dayDiff <= 60 THEN SomeValue ELSE 0 END) AS SumValue60, 
  SUM(CASE WHEN dayDiff <= 30 THEN SomeValue ELSE 0 END) AS SumValue30
FROM
   (
    SELECT
      Stuff, 
      DATEDIFF(day, SomeData, GETDATE()) AS dayDiff
    FROM
      Mytable
    WHERE
       ...
    ) foo
GROUP BY
   ...