क्वेरी संस्करण 2 इतना तेज़ क्यों है?जब मैं (मैन्युअल रूप से) एक अस्थायी तालिका में तालिका-मूल्यवान फ़ंक्शन के परिणामों को कैश करता हूं तो कोई क्वेरी इतनी तेज क्यों होती है?
मुझे संदेह है कि डीबी इंजन तालिका-मूल्यवान-फ़ंक्शन "GetUsageStatistic" को कई बार कॉल कर रहा है, तो क्या इंजन को यह बताने का कोई तरीका है कि "GetUsageStatistic" निर्धारक है और इसे केवल एक बार बुलाया जाना चाहिए?
क्वेरी संस्करण 1
--Takes ~10 minutes
select *
from RosterLevel r
left join GetUsageStatistics(@mindate, @maxdate) usage on r.UserID = usage.UserID;
क्वेरी संस्करण 2
--Takes ~10 seconds
select * into #usage from GetUsageStatistics(@mindate, @maxdate);
select *
from RosterLevel r
left join #usage on r.UserID = #usage.UserID;
'GetUsageStatistics' का शरीर कैसा दिखता है? क्या यह एक प्रश्न है, या एकाधिक प्रश्नों को एक परिणाम के लिए अग्रणी है? –
GetUsageStatistics एक इनलाइन-टेबल-मूल्यवान-फ़ंक्शन (आईटीवीएफ) है, जो GetWeeklyUsage से चुनता है, जो स्वयं एक आईटीवीएफ है जो GetDailyUsage (एक आईटीवीएफ) से भी चयन करता है। यह मूल रूप से निर्धारक आईटीवीएफ की एक साधारण श्रृंखला है कि प्रत्येक अपने आउटपुट कॉलम में एसयूएम, एवीजी, और COUNT कार्यों के साथ कुल परिणामों का स्तर लौटाता है। – Triynko
@Triynko - निश्चित रूप से दोनों प्रश्नों के लिए वास्तविक निष्पादन योजनाएं प्राप्त करने और उन्हें देखने के लिए तुलना करना कि टीवीएफ सिद्धांत का आपका बहु-निष्पादन सही है या नहीं। –