इस बार काफी अधिक performant है, लेकिन एक इनलाइन तालिका महत्वपूर्ण कार्य करने के लिए अदिश समारोह को बदलने की आवश्यकता है।
UPDATE
a
SET
SomeField = b.SomeField
FROM
TableA AS a
CROSS APPLY
dbo.oneInlineTableValuedFunction(@CurrencyFrom, e.Currency) AS ITVF
INNER JOIN
TableB b
ON b.Link = a.Link
WHERE
b.CostMin <= @Cost * ITVF.exchangeRate
AND b.CostMax >= @Cost * ITVF.exchangeRate
हालांकि तालिका महत्वपूर्ण कार्यों टेबल लौटने के लिए, आप एक क्षेत्र के साथ सिर्फ एक पंक्ति retun चुन सकते हैं। तो फिर तुम यह एक अदिश समारोह के रूप में प्रभावी ढंग से उपयोग कर रहे हैं - लेकिन, आप कैसे एसक्यूएल सर्वर क्वेरी ऊपर अनुकूलन कर सकते हैं के सभी लाभ प्राप्त ...
- TVF इनलाइन (और नहीं बहु बयान)
है
CREATE FUNCTION dbo.oneInlineTableValuedFunction (
@currencyFrom VARCHAR(32),
@currencyTo VARCHAR(32)
)
RETURNS TABLE
AS
RETURN (
SELECT
exchangeRate
FROM
dbo.someTable
WHERE
currencyFrom = @currencyFrom
AND currencyTo = @currencyTo
)
: - परिणाम प्रदर्शन dramatiaclly अदिश कार्यों
उदाहरण इनलाइन तालिका मूल्य समारोह से बेहतर है - TVF क्वेरी
में बाहर का विस्तार हो जाता है
जानबूझ कर इस बारे में तुच्छ
एक उदाहरण पोस्ट: scalar-functions-inlining-and-performance
आप INLINE CROSS APPLY SCALAR FUNCTION PERFORMANCE
के लिए वेब खोज के तो मुझे यकीन है कि आप और भी बहुत कुछ मिल जाएगा।
धन्यवाद। ऐसा लगता है कि तालिका-मूल्यवान कार्यों के पक्ष में स्केलर कार्यों को छोड़ने के अलावा कोई और विकल्प नहीं है। – 10p
@ 10p - वे * पूरे डेटा-सेट पर लागू होने पर बड़े पैमाने पर अधिक कुशल होते हैं। – MatBailie