다음 쿼리를 고려하십시오.
MERGE [Parameter] with (rowlock) AS target
USING (SELECT @AreaId, @ParameterTypeId, @Value)
AS source (AreaId, ParameterTypeId, Value)
ON (target.AreaId = source.AreaId AND
target.ParameterTypeId = source.ParameterTypeId)
WHEN MATCHED THEN
UPDATE SET target.Value = source.Value, @UpdatedId = target.Id
WHEN NOT MATCHED THEN
INSERT ([AreaId], [ParameterTypeId], [Value])
VALUES (source.AreaId, source.ParameterTypeId, source.Value);
통계 I / O는 다음과 같은 출력을 제공합니다.
'ParameterType'테이블. 스캔 횟수 0, 논리적 읽기 2, 물리적 읽기 0, 미리 읽기 0, lob 논리적 읽기 0, lob 물리적 읽기 0, lob 미리 읽기 0.
표 'Area'. 스캔 카운트 0, 논리적 읽기 2, 물리적 읽기 0, 미리 읽기 0, lob 논리적 읽기 0, lob 물리적 읽기 0, lob 미리 읽기 0.
테이블 '매개 변수'. 스캔 횟수 1, 논리적 읽기 4, 물리적 읽기 0, 미리 읽기 0, lob 논리적 읽기 0, lob 물리적 읽기 0, lob 미리 읽기 0.
테이블 '작업 테이블'. 스캔 횟수 1, 논리적 읽기 0, 물리적 읽기 0, 미리 읽기 0, lob 논리적 읽기 0, lob 물리적 읽기 0, lob 미리 읽기 0
메시지 테이블에 작업 테이블이 나타나서 tempdb가 사용 중이라고 생각합니다 MERGE
.
실행 계획에 tempdb가 필요하다는 것을 나타내는 내용이 없습니다.
MERGE
항상 tempdb를 사용 합니까 ?
BOL에이 동작을 설명하는 내용이 있습니까?
이 상황에서 사용 INSERT
하고 UPDATE
더 빠를까요?
왼쪽
권리
다음은 테이블 구조입니다
tempdb
. 그래도 단일 행에 대해 이상하게 보입니다. 할로윈 보호를 위해있을 수 있습니다.