2009-11-09 59 views
0

我有一組的大約一百萬行(約ROWSIZE:1.5KB)需要被「緩存」,使我們的應用程序的許多不同部分可以利用它。SQL服務器:持久性「高速緩存」表在整個連接

這些行是從其它表彙編的數據的導出/非規格化「視圖」。生成這些數據並不是非常昂貴(30-60秒),但是太慢而無法生成「即時」作爲應用程序可以直接查詢的視圖或表值函數的一部分。我想定期更新這些數據,也許每幾分鐘更新一次。

我的第一個想法是有一個計劃的作業,每隔n分鐘用這個數據更新一個全局臨時表。

什麼是最好的策略,性能明智?我不確定將其存儲在實際表中與全局臨時表(##表名)相比,我還沒有想到的其他策略的性能影響。我不想用事件日誌插入到這個表中......這是所有派生數據,不需要持久化。

我正在使用Microsoft SQL Server 2000.在此項目的時間範圍內升級不是一個選項,但如果在2005/2008/2010有功能,這將使這更容易,我會很感激聽到這一點。

回答

1

我建議使用materialized view(AKA索引視圖)。

限制:

  1. 視圖定義必須始終從相同的底層數據返回相同的結果。
  2. 視圖不能使用非確定性函數。
  3. View上的第一個索引必須是聚簇UNIQUE索引。
  4. 如果您使用Group By,則必須在選擇列表中包含新的COUNT_BIG(*)。
  5. 視圖定義不能包含以下內容:對

    1. TOP
    2. 文本,ntext或者image列
    3. DISTINCT
    4. MIN,MAX,COUNT,STDEV,VARIANCE,AVG
    5. SUM表達式可爲空
    6. 派生表
    7. 行集功能
    8. 另一種觀點
    9. UNION
    10. 子查詢,外連接,自加入
    11. 全文謂詞等含有或FREETEXT
    12. 計算或COMPUTE BY
    13. 不能在視圖定義包括訂單
+0

謝謝你的回覆!對於物化視圖的侷限性,我從來不清楚。但對於這個問題,這些限制對我來說不起作用。 – 2009-11-11 13:38:30

+0

@John:是的,物化視圖被稱爲不是非常容易:( – 2009-11-11 17:09:18

+0

我再次看到,它只有1K。希望你已經很好 - ) – 2010-02-19 21:54:43