2013-03-13 58 views
0

假設我們有MS SQL Server數據庫和表A在其中。然後,我們執行這樣的:SQL服務器如何處理臨時表的更新(關於磁盤訪問)

select A.a1 
into #temp1 
from A 

link說:「如果內存可用,無論是表變量和臨時表的創建和處理,同時在內存(數據緩存)。」

假設我們在#temp1中有100行,這很容易適應內存...所以整個#temp1現在在內存中。但是,我們執行以下語句:

UPDATE #temp1 SET a1 = a1 + 1 

這是否涉及一些IO操作?例如,是寫入temp_log(這是我認爲,不在RAM中)?或者,也許,因爲我們現在正在更新,整個#temp1被移動到hdd ...?

回答

0

我的理解是沒有爲臨時表保留日誌,因爲tempdb在每次重新啓動時都被清除。

更新: 記錄發生在tempdb中,但是它減少了:http://msdn.microsoft.com/en-ca/library/ms190768.aspx;

也許表值變量是合適的,而不是在tempdb中的表: http://msdn.microsoft.com/en-us/library/ms175010.aspx

+0

我覺得日誌保存的臨時表。如果沒有記錄日誌,臨時表日誌文件的目的是什麼? – 2013-03-13 19:34:16

+0

我們都是(各種)正確的。記錄發生在tempdb中,但會減少:http://msdn.microsoft.com/en-ca/library/ms190768.aspx; – 2013-03-13 19:36:49

+0

請注意,[表變量使用tempdb](http://cybersql.blogspot.com/2009/12/yes-table-variables-and-temp-tables.html) – iruvar 2013-03-13 19:55:46