मैं कुछ पुरानी संग्रहीत प्रक्रिया को फिर से लिख रहा हूं और इनलाइन कोड की बजाय फ़ंक्शन का उपयोग करते समय मुझे एक अप्रत्याशित प्रदर्शन समस्या मिली है।क्यों एक साधारण टी-एसक्यूएल यूडीएफ फ़ंक्शन कोड निष्पादन को 3 गुना धीमा बनाता है
समारोह के रूप में पालन बहुत सरल है:
ALTER FUNCTION [dbo].[GetDateDifferenceInDays]
(
@first_date SMALLDATETIME,
@second_date SMALLDATETIME
)
RETURNS INT
AS
BEGIN
RETURN ABS(DATEDIFF(DAY, @first_date, @second_date))
END
तो मुझे मिल गया है दो समान प्रश्नों, लेकिन एक समारोह का उपयोग करता है और अन्य क्वेरी अपने आप में गणना करता है:
ABS(DATEDIFF(DAY, [mytable].first_date, [mytable].second_date))
अब इनलाइन कोड के साथ क्वेरी फ़ंक्शन का उपयोग करके 3 गुना तेज है।
पोस्ट करने के लिए धन्यवाद। आपका अंतिम लिंक इस समस्या पर एक अच्छा अनुभवजन्य विश्लेषण है लेकिन यह समझ में नहीं आता कि यह व्यवहार क्यों है। –
@nagul - आपका पहला लिंक खराब है। ऐसा लगता है कि एसक्यूएलमैग ने अपना यूआरएल बदल दिया है। कोई मौका यह लेख है? http://sqlmag.com/user-defined-function-udf/udfs-endanger-performance – EBarr