मैंने एक टेबल-मूल्यवान यूडीएफ लिखा है जो एक बड़ी तालिका से पंक्तियों का सबसेट लौटने के लिए सीटीई द्वारा शुरू होता है। सीटीई में कई शामिल हैं। कुछ आंतरिक और एक बाएं अन्य तालिकाओं में शामिल हो गए, जिनमें बहुत सारी पंक्तियां नहीं हैं। सीटीई में एक ऐसा खंड है जो केवल पंक्तियों को वापस करने के लिए पंक्तियों के भीतर पंक्तियों को लौटाता है।एसक्यूएल सर्वर सीटीई में स्वयं को शामिल किया गया धीमा
मैं विभिन्न मानदंडों का उपयोग करके उप-योग बनाने के लिए, 4 स्वयं बाएं जुड़ने में इस सीटीई का संदर्भ दे रहा हूं।
क्वेरी काफी जटिल है, लेकिन यहाँ यह की एक सरल छद्म संस्करण
WITH DataCTE as
(
SELECT [columns] FROM table
INNER JOIN table2
ON [...]
INNER JOIN table3
ON [...]
LEFT JOIN table3
ON [...]
)
SELECT [aggregates_columns of each subset] FROM DataCTE Main
LEFT JOIN DataCTE BananasSubset
ON [...]
AND Product = 'Bananas'
AND Quality = 100
LEFT JOIN DataCTE DamagedBananasSubset
ON [...]
AND Product = 'Bananas'
AND Quality < 20
LEFT JOIN DataCTE MangosSubset
ON [...]
GROUP BY [
मैं महसूस कर रही है कि एसक्यूएल सर्वर भ्रमित हो जाता है और शामिल होने के प्रत्येक स्वयं के लिए CTE, जो को देखकर इस बात की पुष्टि लगता है कॉल निष्पादन योजना, हालांकि मैं उनको पढ़ने में एक विशेषज्ञ नहीं मानता हूं।
मैं एसक्यूएल सर्वर को केवल कई बार करने के बजाय केवल एक बार सीटीई से डेटा पुनर्प्राप्ति करने के लिए पर्याप्त स्मार्ट होने के लिए मानता।
मैंने डेटा के सबसेट प्राप्त करने के लिए एक सीटीई का उपयोग करने के बजाय एक ही दृष्टिकोण की कोशिश की है, मैंने सीटीई में समान चयन क्वेरी का उपयोग किया, लेकिन इसके बजाय इसे एक टेम्पलेट तालिका में आउटपुट किया।
सीटीई संस्करण का संदर्भ देने वाला संस्करण 40 सेकंड लेता है। अस्थायी तालिका का जिक्र करने वाला संस्करण 1 से 2 सेकंड के बीच आता है।
SQL सर्वर को सीटीई परिणामों को स्मृति में रखने के लिए पर्याप्त स्मार्ट क्यों नहीं है?
मुझे सीटीई पसंद है, खासकर इस मामले में क्योंकि मेरा यूडीएफ एक टेबल-मूल्यवान है, इसलिए यह मुझे सबकुछ एक ही कथन में रखने की इजाजत देता है।
एक temp तालिका का उपयोग करने के लिए, मुझे एक बहु-कथन तालिका मूल्यवान यूडीएफ लिखनी होगी, जिसे मुझे थोड़ा कम सुरुचिपूर्ण समाधान मिल जाएगा।
क्या आप में से कुछ ने सीटीई के साथ इस तरह के प्रदर्शन मुद्दों को किया था, और यदि हां, तो आप उन्हें कैसे हल कर चुके थे?
धन्यवाद,
Kharlos
क्या आप अपनी निष्पादन योजना पोस्ट कर सकते हैं? –