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 MERGE
luô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 INSERT
và 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.