2017-10-11 8 views
1

私のデータセットが大きすぎるため(約1,200万レコード)、クエリできません。私は中間計算のために多くの量のデータを取得する必要があります。 Tempテーブルを使用すると、膨大なメモリが消費されます。ファイル記憶域ではなく、ファイル記憶域にテンポラリテーブルを作成できますか?

SQL Server 2008 R2以降では、メモリではなく一時テーブルをディスク内に作成できるメカニズムはありますか?

+2

'tempdb'は実際のもので、実際のファイルに裏付けられています。一時テーブル*はディスクに移動します。 (ただし、SQL Serverはメモリを空にしないでメモリに保存することをお勧めします) –

+0

1200万レコードをバッチで分割して別々に処理できませんか? –

+2

実際、tempテーブルはtempdbに格納され、ファイルベースであり、テーブル変数はメモリ内のみであるという共通の神話です。 –

答えて

2

あなたは変数

declare @table ... 

のようなテーブルを宣言する場合それは、メモリに保存されています。

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

あなたはそれが自動にこのような何かをやって作成することができます: はこのようなすべてのセッションのためにのみご使用セッションまたは##のプレフィックスのために#プレフィックスを持つ通常のテーブルのような一時テーブルを作成するDBファイルに保存します

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

私は質問の下でコメントしたように、このメモリ対テーブル変数と一時テーブルのファイルの違いは**神話**です。私はそれが今までに切れたと思ったが、明らかにそうではなかった。両方の型は、tempdbにデータを格納し、ディスク領域を占有する可能性があります。 –

+0

例:[メモリ最適化を使用した一時テーブルとテーブル変数の高速化](https://docs.microsoft.com/en-us/sql/relational-databases/in-memory-oltp/faster-temp-table-and)テーブルの変数はtempdbデータベース内のテーブルを表します。パフォーマンスを大幅に向上させるには、メモリを最適化することができます。あなたのテーブル変数。 –

+0

@tableと#TMPの両方がtempdbに作成されるので、Damien_The_Unbelieveに+1してください – sepupic

関連する問題