我如何每24小时缓存一个变量?

时间:2012-11-26 21:12:30

标签: sql sql-server sql-server-2008 tsql

我的查询表现糟糕:

select COUNT(distinct accession_id) count,MONTH(received_date) month,YEAR(received_date) year
into #tmpCounts
from F_ACCESSION_DAILY
where CLIENT_ID not in (select clientid from SalesDWH..TestPractices)
group by MONTH(received_date),YEAR(received_date)

我想创建一个变量或视图或其他任何我可以存储在服务器上的服务器,并让服务器每24小时自动计算一次,而不是等待这个查询。

我希望能够做select * from #tmpCounts

我怎样才能做到这一点?

3 个答案:

答案 0 :(得分:1)

我不知道这是否满足您的需求,但我会创建一个用于存储它的表,使用SQL Server代理创建一个只截断表的作业,运行您在上面提到的查询并插入行。从那时起,您可以在表格中查询这些结果。

顺便说一下,截断和加载表的最简单方法可能是运行一个非常简单的SSIS包。

答案 1 :(得分:1)

除了你的性能问题,每天每次尝试一次替代预建...你要处理多少条记录来处理这个查询。

另外,我会改变查询,因为IN(SUBSELECT)总是很可怕。我将更改为LEFT-JOIN到客户端表并测试是否为NULL

select 
      YEAR(FAD.received_date) year,
      MONTH(FAD.received_date) month,
      COUNT(distinct FAD.accession_id) count
   from 
      F_ACCESSION_DAILY FAD
         LEFT JOIN SalesDWH..TestPractices TP
            on FAD.Client_ID = TP.ClientID
   where 
      TP.CLIENT_ID IS NULL
   group by 
      YEAR(FAD.received_date),
      MONTH(FAD.received_date)

我还要确保在receive_date上的ACCESSION表上有一个索引,并在其ClientID上有你的TestPractices表

答案 2 :(得分:1)

不要创建缓存表,而应考虑创建索引视图。有一些限制,但您可以在没有太多额外处理或代码的情况下显着提高性能。

以下是一些基本信息:

http://beyondrelational.com/quiz/sqlserver/tsql/2011/questions/advantage-and-disadvantage-of-using-indexed-view-in-sql-server.aspx