ฉันมีตารางที่มีแถวไม่กี่สิบแถว การตั้งค่าแบบง่ายกำลังติดตาม
CREATE TABLE #data ([Id] int, [Status] int);
INSERT INTO #data
VALUES (100, 1), (101, 2), (102, 3), (103, 2);
และฉันมีแบบสอบถามที่รวมตารางนี้เข้ากับชุดของค่าตารางที่สร้างแถว (ทำจากตัวแปรและค่าคงที่) เช่น
DECLARE @id1 int = 101, @id2 int = 105;
SELECT
COALESCE(p.[Code], 'X') AS [Code],
COALESCE(d.[Status], 0) AS [Status]
FROM (VALUES
(@id1, 'A'),
(@id2, 'B')
) p([Id], [Code])
FULL JOIN #data d ON d.[Id] = p.[Id];
แผนการดำเนินการค้นหาแสดงให้เห็นว่าการตัดสินใจของเครื่องมือเพิ่มประสิทธิภาพคือการใช้FULL LOOP JOIN
กลยุทธ์ซึ่งดูเหมือนเหมาะสมเนื่องจากอินพุตทั้งสองมีแถวน้อยมาก แต่สิ่งหนึ่งที่ฉันสังเกตเห็น (และไม่สามารถตกลงกันได้) คือแถว TVC กำลังถูกสพูล (ดูพื้นที่ของแผนการดำเนินการในช่องสีแดง)
ทำไมเครื่องมือเพิ่มประสิทธิภาพแนะนำสปูลที่นี่อะไรคือเหตุผลที่ต้องทำ ไม่มีอะไรซับซ้อนเกินกว่าสปูล ดูเหมือนว่ามันไม่จำเป็น วิธีกำจัดในกรณีนี้มีวิธีใดบ้างที่เป็นไปได้?
ได้รับแผนดังกล่าวข้างต้น
Microsoft SQL Server 2014 (SP2-CU11) (KB4077063) - 12.0.5579.0 (X64)