में स्केलर बनाम तालिका-मूल्यवान कार्यों का प्रदर्शन प्रदर्शन ठीक है इसलिए मैंने टेबल-वैल्यू फ़ंक्शंस का सुझाव देने वाले लेखों का एक पूरा समूह पढ़ा है और क्रॉस लागू स्केलर udf से बेहतर प्रदर्शन प्रदान करता है। मैं अपने काम को दोनों तरीकों से लिखना चाहता था और फिर यह देखने के लिए परीक्षण करता हूं कि कौन सा बेहतर है - लेकिन मैं यह नहीं समझ सकता कि मुझे क्या उपयोग करना है/यह समझने के लिए कि कौन सा बेहतर विकल्प है।एसक्यूएल सर्वर
मैं SQL सर्वर 2005 का उपयोग कर रहा हूं। मैंने अनुमानित निष्पादन योजना, वास्तविक निष्पादन योजना चलाने और डेटाबेस इंजन ट्यूनिंग सलाहकार में क्वेरी का विश्लेषण करने का प्रयास किया है और मुझे नहीं पता कि यह मुझे क्या बताने की कोशिश कर रहा है।
showplan_all चालू/बंद का उपयोग करना ऐसा लगता है कि तालिका आधारित फ़ंक्शन अधिक cpu 1.157e-06 बनाम 8.3e-05 का उपयोग करेगा, लेकिन तालिका फ़ंक्शन में 0.000830157 बनाम 0.01 9 83356 की कुल उप-लागत है।
तालिका मूल्यवान फ़ंक्शन की क्वेरी लागत स्केलर की तुलना में अधिक लागत लगती है। भले ही मैंने सोचा कि यह बेहतर विकल्प माना जाता है।
तो जब भी मैं इसे साबित करना चाहता हूं कि कौन सा बेहतर प्रदर्शन देता है - मुझे यकीन नहीं है कि इन उपकरणों में क्या देखना है - इसलिए किसी भी सुझाव की सराहना की जाएगी!
मुझे कैलेंडर तिथि के आधार पर अकादमिक वर्ष मूल्य (डेटाबेस में सेट दिनांक सीमा के आधार पर) प्राप्त करने की आवश्यकता है ताकि फ़ंक्शन सामग्री नीचे दी गई हो - तो यह ठीक है कि मैं स्केलर या तालिका आधारित हूं या नहीं। इस साल अन्य प्रश्नों में फ़ीड ..
CREATE FUNCTION fn_AcademicYear
(
-- Add the parameters for the function here
@StartDate DateTime
)
RETURNS
@AcademicYear TABLE
(
AcademicYear int
)
AS
BEGIN
DECLARE @YearOffset int, @AcademicStartDate DateTime
-- Lookup Academic Year Starting Date
SELECT @AcademicStartDate = CONVERT(DateTime,[Value])
FROM dbo.SystemSetting
WHERE [Key] = 'AcademicYear.StartDate'
SET @YearOffset = DATEPART(YYYY,@StartDate) - DATEPART(YYYY,@AcademicStartDate);
-- try setting academic looking start date to year of the date passed in
SET @AcademicStartDate = DATEADD(YYYY, @YearOffset, @AcademicStartDate);
IF @StartDate < @AcademicStartDate
BEGIN
SET @AcademicStartDate = DATEADD(YYYY, @YearOffset-1, @AcademicStartDate);
END
INSERT @AcademicYear
SELECT YEAR(@AcademicStartDate)
RETURN
धन्यवाद !!
जिज्ञासा से बाहर - क्या आप वास्तव में पाते हैं कि 'YYYY'' वर्ष 'की तुलना में अधिक पठनीय है? –
मैंने वास्तव में इसके बारे में सोचा नहीं है .. और किसी और के फ़ंक्शन से उस वाक्यविन्यास को लिया :) लेकिन हाँ साल अधिक पठनीय होगा। – Jen