दोनों निष्पादन योजनाओं के नीचे दिए गए प्रश्नों में एक अद्वितीय सूचकांक पर 1,000 खोज करने का अनुमान है।
एक ही स्रोत तालिका पर एक ऑर्डर किए गए स्कैन द्वारा सीक को संचालित किया जाता है, इसलिए समान क्रम में समान मूल्यों की मांग करते हुए समाप्त होना चाहिए।
दोनों नेस्टेड लूप्स हैं <NestedLoops Optimized="false" WithOrderedPrefetch="true">
किसी को भी पता है कि इस कार्य की लागत पहली योजना में 0.172434 क्यों है, लेकिन दूसरे में 3.01702 है?
(प्रश्न का कारण यह है कि पहली क्वेरी मुझे स्पष्ट रूप से बहुत कम योजना लागत के कारण अनुकूलन के रूप में सुझाई गई थी। यह वास्तव में मुझे ऐसा लगता है जैसे यह अधिक काम करता है लेकिन मैं सिर्फ विसंगति को समझाने का प्रयास कर रहा हूं। ।)
सेट अप
CREATE TABLE dbo.Target(KeyCol int PRIMARY KEY, OtherCol char(32) NOT NULL);
CREATE TABLE dbo.Staging(KeyCol int PRIMARY KEY, OtherCol char(32) NOT NULL);
INSERT INTO dbo.Target
SELECT TOP (1000000) ROW_NUMBER() OVER (ORDER BY @@SPID), LEFT(NEWID(),32)
FROM master..spt_values v1,
master..spt_values v2;
INSERT INTO dbo.Staging
SELECT TOP (1000) ROW_NUMBER() OVER (ORDER BY @@SPID), LEFT(NEWID(),32)
FROM master..spt_values v1;
प्रश्न 1 "योजना पेस्ट करें" लिंक
WITH T
AS (SELECT *
FROM Target AS T
WHERE T.KeyCol IN (SELECT S.KeyCol
FROM Staging AS S))
MERGE T
USING Staging S
ON ( T.KeyCol = S.KeyCol )
WHEN NOT MATCHED THEN
INSERT ( KeyCol, OtherCol )
VALUES(S.KeyCol, S.OtherCol )
WHEN MATCHED AND T.OtherCol > S.OtherCol THEN
UPDATE SET T.OtherCol = S.OtherCol;
प्रश्न 2 "योजना पेस्ट करें" लिंक
MERGE Target T
USING Staging S
ON ( T.KeyCol = S.KeyCol )
WHEN NOT MATCHED THEN
INSERT ( KeyCol, OtherCol )
VALUES( S.KeyCol, S.OtherCol )
WHEN MATCHED AND T.OtherCol > S.OtherCol THEN
UPDATE SET T.OtherCol = S.OtherCol;
प्रश्न 1
प्रश्न २
SQL सर्वर 2014 (SP2) (KB3171021) - 12.0.5000.0 (X64) पर उपरोक्त परीक्षण किया गया था
@ जोए ओबिश टिप्पणी में बताते हैं कि एक सरल रीप्रो होगा
SELECT *
FROM staging AS S
LEFT OUTER JOIN Target AS T
ON T.KeyCol = S.KeyCol;
बनाम
SELECT *
FROM staging AS S
LEFT OUTER JOIN (SELECT * FROM Target) AS T
ON T.KeyCol = S.KeyCol;
1,000 पंक्ति मेज़िंग टेबल के लिए उपरोक्त दोनों के पास अभी भी नेस्टेड लूप के साथ एक ही योजना का आकार है और व्युत्पन्न तालिका के बिना योजना सस्ती दिखाई देती है , लेकिन लागत में अंतर से ऊपर 10,000 राउंड मेज़िंग टेबल और एक ही लक्ष्य तालिका के लिए योजना में बदलाव नहीं करता है। आकार (एक पूर्ण स्कैन और मर्ज में शामिल है जो महंगे महंगे लुक की तुलना में अपेक्षाकृत अधिक आकर्षक लगता है) इस लागत की विसंगति को दिखाने के लिए योजनाओं की तुलना करना कठिन बनाने के अलावा अन्य निहितार्थ हो सकते हैं।