Hãy xem xét các truy vấn sau:
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);Thống kê I / O cho đầu ra sau:
Bảng 'ParameterType'. Quét số 0, đọc logic 2, đọc vật lý 0, đọc trước đọc 0, đọc logic 0, đọc vật lý lob 0, đọc trước đọc trước 0.
Bảng 'Khu vực'. Quét số 0, đọc logic 2, đọc vật lý 0, đọc trước đọc 0, đọc logic 0, đọc vật lý lob 0, đọc trước đọc trước 0.
Bảng 'Tham số'. Quét số 1, đọc logic 4, đọc vật lý 0, đọc trước đọc 0, đọc logic 0, đọc vật lý lob 0, đọc trước đọc trước 0.
Bảng 'Worktable'. Quét số 1, đọc logic 0, đọc vật lý 0, đọc trước đọc 0, đọc logic 0, đọc vật lý lob 0, đọc trước đọc 0, đọc trước 0.
Worktable xuất hiện trong tab tin nhắn khiến tôi nghĩ rằng tempdb đang được sử dụng MERGE.
Tôi không thấy bất cứ điều gì trong kế hoạch Thi hành cho thấy cần phải có tempdb
Có phải MERGEluôn luôn sử dụng tempdb?
Có bất cứ điều gì trong BOL giải thích hành vi này?
Sẽ sử dụng INSERTvà UPDATEđược nhanh hơn trong tình huống này?
Trái

Đúng

Đây là cấu trúc bảng

tempdb. Có vẻ kỳ lạ rằng nó là có cho một hàng duy nhất mặc dù. Tôi đoán nó có thể ở đó để bảo vệ Halloween.