2011-11-05 127 views
0

我有一張存儲複雜查詢數據的表格。該表格被截斷並每小時新填充一次。正如您可能認爲這是出於性能原因,應用程序訪問此表而不是查詢。如何避免炸燬交易記錄?

是截斷並插入唯一的方法來解決這個任務便宜,或者有關於事務日誌的其他可能性?

回答

1

如果我假設是正確的,您將此表用作臨時表來存儲一些記錄,並且希望每隔一小時從該表中刪除所有記錄,對嗎?

截斷總是被最小化記錄。所以是的,截斷,然後插入將工作。另一種選擇是創建一個具有相同結構的新表。刪除舊錶,然後將新表重命名爲舊錶名。

如果您想避免上述情況,您可以探索「簡單」恢復模型(這對恢復時間點有影響 - 因此如果在同一數據庫中有其他表,請對此非常小心)。或者你可以創建一個只有這個表的新數據庫,將這個數據庫的恢復設置爲「簡單」。簡單的恢復模式將幫助您保持較小的t-log。最後,如果您必須完全恢復並且不能使用上面的「truncate」或「drop」選項,那麼您至少應該定期備份t-log(取決於它的增長有多大)和你有多少空間)。

+0

+1如果該表未與其他用戶共享,那麼使用#temp可能會獲得一些性能優勢。我認爲即使日誌記錄不簡單,你也可以放棄#temp。由於您將結果保留長達一個小時,因此您似乎可以接受陳舊的讀取,因此可以在查詢中使用(nolock)提示。 – Paparazzi

+0

「截斷總是被最小化記錄,所以是的,截斷然後插入將起作用。」它是填充日誌的INSERT語句嗎? 爲什麼創建表的形式是「select * into source_table中的hourely_table」不填充日誌? – Ice

+0

取決於你如何做插入。通常,插入完全記錄。某些批量插入操作的記錄最少。請參閱http://msdn.microsoft.com/en-us/library/ms191244.aspx以獲取可以最小化記錄和在什麼情況下執行的操作列表。 –