मेरे पास कुछ दर्जन पंक्तियों वाली एक मेज है। सरलीकृत सेटअप निम्नलिखित है
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
रणनीति का उपयोग करना है, जो उचित लगता है, क्योंकि दोनों इनपुट में बहुत कम पंक्तियाँ हैं। एक बात जिस पर मैंने ध्यान दिया (और सहमत नहीं हो सकता), हालांकि, यह है कि टीवीसी पंक्तियों को स्पूल किया जा रहा है (लाल बॉक्स में निष्पादन योजना का क्षेत्र देखें)।
क्यों अनुकूलक यहाँ स्पूल का परिचय देता है, इसे करने का क्या कारण है? स्पूल से आगे कुछ भी जटिल नहीं है। ऐसा लगता है कि यह आवश्यक नहीं है। इस मामले में कैसे छुटकारा पाएं, इसके संभावित तरीके क्या हैं?
उपरोक्त योजना प्राप्त की गई थी
Microsoft SQL सर्वर 2014 (SP2-CU11) (KB4077063) - 12.0.5579.0 (X64)