2017-10-11 2 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) 
    .... 
) 

당신은이를 automaticly 같은 일을 만들 수 있습니다 이 같은 모든 세션에 대해서만 세션 또는 ## 접두사 # 접두사와 일반 테이블과 같은 임시 테이블을 만들 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) "테이블 - 변수 - 사용 - 메모리 최적화 # d-scenario-table-variable-can-be-memoryoptimizedon) :"전통적인 테이블 변수는 tempdb 데이터베이스의 테이블을 나타내며 훨씬 빠른 성능을 위해 메모리를 최적화 할 수 있습니다 귀하의 테이블 변수. " –

+0

@table과 #TMP 모두 tempdb에 생성되므로 Damien_The_Unbelieve에 +1하십시오. – sepupic

관련 문제