내 데이터 집합이 너무 커서 (약 1,200 만 레코드) 쿼리 할 수 없습니다. 중간 계산을 위해 많은 양의 데이터를 가져와야합니다. Temp 테이블을 사용하면 엄청난 메모리가 소비됩니다.메모리가 아닌 파일 저장소에 임시 테이블을 만들 수 있습니까?
디스크의 메모리가 아닌 임시 테이블을 만들 수있는 메커니즘이 SQL Server 2008 R2 이후 버전에 있습니까?
내 데이터 집합이 너무 커서 (약 1,200 만 레코드) 쿼리 할 수 없습니다. 중간 계산을 위해 많은 양의 데이터를 가져와야합니다. Temp 테이블을 사용하면 엄청난 메모리가 소비됩니다.메모리가 아닌 파일 저장소에 임시 테이블을 만들 수 있습니까?
디스크의 메모리가 아닌 임시 테이블을 만들 수있는 메커니즘이 SQL Server 2008 R2 이후 버전에 있습니까?
당신은 선언하면 그것은 메모리에 저장되어있는 변수
declare @table ...
같은 테이블.
:CREATE table #TMP (
name nvarchar(20)
....
)
당신은이를 automaticly 같은 일을 만들 수 있습니다 이 같은 모든 세션에 대해서만 세션 또는 ## 접두사 # 접두사와 일반 테이블과 같은 임시 테이블을 만들 DB 파일에 저장하려면
select id, name, something_else into #TMP from your_phisical_table
내가 아래 질문에 댓글을 달았으므로이 메모리 대 테이블 변수와 임시 테이블 간의 파일 차이는 ** 신화 **입니다. 나는 그것이 지금 만료 되었기를 바랐지만 분명히 그렇지 않았다. 두 유형 모두 tempdb에 데이터를 저장하고 디스크 공간을 차지할 수 있습니다. –
예 : [메모리 최적화를 사용하여 임시 테이블 및 테이블 변수를보다 빠르게] (https://docs.microsoft.com/en-us/sql/relational-databases/in-memory-oltp/faster-temp-table-and) "테이블 - 변수 - 사용 - 메모리 최적화 # d-scenario-table-variable-can-be-memoryoptimizedon) :"전통적인 테이블 변수는 tempdb 데이터베이스의 테이블을 나타내며 훨씬 빠른 성능을 위해 메모리를 최적화 할 수 있습니다 귀하의 테이블 변수. " –
@table과 #TMP 모두 tempdb에 생성되므로 Damien_The_Unbelieve에 +1하십시오. – sepupic
'tempdb'는 실제 파일이며 실제 파일로 백업됩니다. 임시 테이블 *은 디스크로 이동합니다. (하지만 SQL Server는 메모리를 비우는 대신 메모리에 최신 데이터를 유지하는 편을 선호합니다.) –
1200 만 개의 레코드를 일괄 처리하여 개별적으로 처리 할 수 없습니까? –
실제로 temp 테이블은 tempdb에 저장되고 파일 기반이었고 테이블 변수는 메모리에만있는 공통된 신화 *였습니다. –