2017-10-11 153 views
1

我的數據集太大(大約1200萬條記錄)要查詢。我需要爲中間計算獲取大量的數據。如果我使用臨時表,這會導致巨大的內存消耗。我們可以在文件存儲中創建臨時表,不在內存中

SQL Server 2008 R2以前有沒有任何機制可以在磁盤上創建臨時表而不是在內存中?

+2

'tempdb'是真實的並且由真實文件支持。臨時表*將*轉到磁盤。 (但SQL Server寧願將熱數據保留在內存中,而不是將內存留空) –

+0

難道你不能分批分割這1200萬條記錄並分別處理它們嗎? –

+2

事實上,它曾經是一個常見的*神話*臨時表在tempdb中進行,因此基於文件和表變量僅在內存中。 –

回答

2

如果你像聲明變量

declare @table ... 

它存儲在內存中的表。 將其存儲在數據庫文件創建像#前綴正常表臨時表只有你的會話或##前綴像這樣所有會話:

CREATE table #TMP (
    name nvarchar(20) 
    .... 
) 

可以創建一個全自動做這樣的事情:

select id, name, something_else into #TMP from your_phisical_table 
+5

正如我在下面的問題所述,表變量與臨時表之間的這種內存vs文件差異是一個**神話**。我希望它現在已經過期,但顯然不是。這兩種類型都將數據存儲在tempdb中,並可能佔用磁盤空間。 –

+0

例如,[通過使用內存優化來加快臨時表和表變量](https://docs.microsoft.com/zh-cn/sql/relational-databases/in-memory-oltp/faster-temp-table-and -table-variable-by-using-memory-optimization#d-scenario-table-variable-can-be-memoryoptimizedon):「傳統的表變量表示tempdb數據庫中的一個表,爲了獲得更快的性能,可以進行內存優化你的表變量。「 –

+0

@ temp和#TMP都在tempdb中創建,所以+1給Damien_The_Unbelieve – sepupic

相關問題