और कार्यों के बारे में कुछ भी नहीं। वास्तविक योजना में फ़ंक्शन जानकारी क्यों गायब है?
यह प्रदर्शन कारणों से डिजाइन के अनुसार है।
कार्य BEGIN
और END
परिभाषा में प्रत्येक इनपुट पंक्ति के लिए एक नया T-SQL स्टैक फ्रेम बनाते हैं। एक और तरीका रखो, फ़ंक्शन बॉडी को प्रत्येक इनपुट पंक्ति के लिए अलग से निष्पादित किया जाता है । यह एकल तथ्य टी-एसक्यूएल स्केलर और मल्टी-स्टेटमेंट फ़ंक्शन (नोट इन-लाइन टेबल वैल्यू फ़ंक्शंस BEGIN...END
सिंटैक्स का उपयोग नहीं करता है) से जुड़ी अधिकांश प्रदर्शन समस्याओं की व्याख्या करता है ।
आपके प्रश्न के संदर्भ में, इसके परिणामस्वरूप SHOWPLAN
प्रत्येक पंक्ति के लिए पूर्ण आउटपुट होगा । एक्सएमएल प्लान आउटपुट काफी क्रियात्मक और महंगा है, इसलिए हर पंक्ति के लिए पूर्ण आउटपुट का उत्पादन सामान्य शब्दों में एक बुरा विचार होगा।
उदाहरण
नीचे दिए गए T- SQL स्केलर फ़ंक्शन पर विचार करें , जो AdventureWorks नमूना डेटाबेस में बनाया गया है , जो किसी उत्पाद का नाम उसकी आईडी देता है:
CREATE FUNCTION dbo.DumbNameLookup
(
@ProductID integer
)
RETURNS dbo.Name
AS
BEGIN
RETURN
(
SELECT
p.Name
FROM Production.Product AS p
WHERE
p.ProductID = @ProductID
);
END;
पूर्व निष्पादन योजना
पूर्व-निष्पादन योजना (SSMS में अनुमानित योजना) मूल विवरण और नेस्टेड फ़ंक्शन कॉल के लिए योजना की जानकारी दिखाती है:
-- Pre-execution plan shows main query and nested function call
SET SHOWPLAN_XML ON;
GO
SELECT dbo.DumbNameLookup(1);
GO
SET SHOWPLAN_XML OFF;
SSMS आउटपुट:
SQL संतरी प्लान एक्सप्लोरर में देखे गए एक्सएमएल कॉल की नेस्टेड प्रकृति को अधिक स्पष्ट रूप से दिखाता है:
निष्पादन के बाद का उत्पादन
एसएसएमएस केवल मुख्य क्वेरी के लिए विवरण दिखाता है जब पोस्ट-एक्ज़ीक्यूशन प्लान आउटपुट का अनुरोध किया जाता है:
-- Post-execution plan shows main query only
SET STATISTICS XML ON;
SELECT dbo.DumbNameLookup(1);
SET STATISTICS XML OFF;
अन्यथा करने का प्रदर्शन प्रभाव SQL Server Profiler में Showplan XML सांख्यिकी प्रोफ़ाइल इवेंट क्लास का उपयोग करके, एक क्वेरी का उपयोग करके दिखाया जा सकता है जो फ़ंक्शन को कई बार कॉल करता है (एक बार इनपुट पंक्ति के अनुसार):
SELECT TOP (5)
p.ProductID,
dbo.DumbNameLookup(p.ProductID)
FROM Production.Product AS p;
Profiler उत्पादन:
फ़ंक्शन निष्पादन के लिए पांच अलग-अलग पोस्ट-निष्पादन योजनाएं हैं, और एक पैरेंट क्वेरी के लिए। पांच फंक्शन की योजना इस प्रकार दिखती है लोअर प्रोफाइल
मूल क्वेरी योजना है:
TOP (5)
उत्पाद तालिका में 504 पंक्तियों में से प्रत्येक के लिए पूर्ण निष्पादन योजना में क्लॉज के बिना क्वेरी निष्पादित करने का परिणाम है। आप शायद देख सकते हैं कि यह कैसे जल्दी से बड़ी तालिकाओं के साथ हाथ से निकल जाएगा।
ट्रिगर्स के लिए स्थिति उलट है। ये किसी पूर्व-निष्पादन योजना की जानकारी नहीं दिखाते हैं, लेकिन एक निष्पादन के बाद की योजना को भी शामिल करते हैं। यह ट्रिगर की सेट-आधारित प्रकृति को दर्शाता है; प्रत्येक को एक पंक्ति के बजाय एक बार प्रभावित सभी पंक्तियों के लिए निकाल दिया जाता है।