Sql 我们可以在文件存储中而不是内存中创建临时表吗

Sql 我们可以在文件存储中而不是内存中创建临时表吗,sql,sql-server,database-administration,Sql,Sql Server,Database Administration,我的数据集太大(约1200万条记录),无法查询。我需要获取大量的数据进行中间计算。如果我使用临时表,这会导致巨大的内存消耗 SQL Server 2008 R2以后版本中是否有任何机制可以在磁盘中创建临时表,而不是在内存中创建临时表?如果您声明类似于表的变量 declare @table ... 它存储在内存中。 要将其存储在db文件中,请像普通表一样创建临时表,仅为您的会话使用#前缀,或为所有会话使用#前缀,如下所示: CREATE table #TMP ( name nvarchar

我的数据集太大(约1200万条记录),无法查询。我需要获取大量的数据进行中间计算。如果我使用临时表,这会导致巨大的内存消耗


SQL Server 2008 R2以后版本中是否有任何机制可以在磁盘中创建临时表,而不是在内存中创建临时表?

如果您声明类似于表的变量

declare @table ...
它存储在内存中。 要将其存储在db文件中,请像普通表一样创建临时表,仅为您的会话使用#前缀,或为所有会话使用#前缀,如下所示:

CREATE table #TMP (
   name nvarchar(20)
   ....
)
select id, name, something_else into #TMP from your_phisical_table
您可以通过以下方式自动创建它:

CREATE table #TMP (
   name nvarchar(20)
   ....
)
select id, name, something_else into #TMP from your_phisical_table

tempdb
是真实的,并由真实文件支持。临时表将转到磁盘。(但SQL Server更愿意将热数据保留在内存中,而不是让内存为空)您不能将1200万条记录分批处理并分别处理吗?事实上,临时表放在tempdb中,因此是基于文件的,而表变量只放在内存中,这是一个常见的误解。正如我在下面的问题中所评论的,表变量与临时表之间的内存与文件差异是一个神话。我希望它现在已经过期了,但显然不是。这两种类型都将数据存储在tempdb中,并且可能会占用磁盘空间。例如,from:“传统的表变量表示tempdb数据库中的表。为了获得更快的性能,您可以对表变量进行内存优化。”@table和#TMP都是在tempdb中创建的,因此+1到Damien_是不可信的