2017-10-11 144 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

相关问题