พิจารณาคำถามต่อไปนี้:
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, ตรรกะการอ่านอ่าน 0, lob การอ่านทางกายภาพ 0, lob การอ่านล่วงหน้าอ่าน 0
ตาราง 'พื้นที่' จำนวนการสแกน 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
ปรากฏ Worktable ในข้อความแท็บที่ทำให้ฉันคิดว่า tempdb MERGE
จะถูกใช้โดย
ฉันไม่เห็นอะไรเลยในแผนปฏิบัติการที่จะบ่งบอกถึงความต้องการ tempdb
ไม่MERGE
เคยใช้ tempdb?
มีอะไรใน BOL ที่อธิบายพฤติกรรมนี้หรือไม่?
จะใช้INSERT
& UPDATE
จะเร็วขึ้นในสถานการณ์นี้ไหม
ซ้าย
ขวา
นี่คือโครงสร้างตาราง
tempdb
หลอดในแผนคือในโต๊ะทำงาน ดูเหมือนจะแปลกที่มันมีแถวเดียวแม้ว่า ฉันคิดว่ามันอาจจะมีการป้องกันฮาโลวีน