2011-10-24 15 views
6

यदि मेरे पास INNER जॉइन के समूह के साथ एक दृश्य है, लेकिन मैं उस दृश्य के खिलाफ क्वेरी करता हूं जो मुख्य तालिका से आने वाले कॉलम को चुनता है, तो SQL सर्वर निष्पादित करते समय दृश्य में अनावश्यक जोड़ों को अनदेखा कर देगा या उनसे जुड़ जाएगा अभी भी किसी कारण से होने की जरूरत है?एसक्यूएल सर्वर दृश्य प्रदर्शन

यदि यह एक अलग बनाता है, तो यह SQL Server 2008 R2 पर है। मुझे किसी भी मामले में पता है कि यह पहले से ही एक अच्छा समाधान नहीं है, लेकिन मैं कम से कम 2 बुराइयों को खोजने का प्रयास कर रहा हूं।

उत्तर

3

यह जोड़ों को अनदेखा कर सकता है अगर वे वास्तव में अर्थशास्त्र को नहीं बदलते हैं। इसका एक उदाहरण हो सकता है यदि आपके पास टेबल के बीच एक विश्वसनीय विदेशी कुंजी बाधा है और आप केवल संदर्भ तालिका (See example 9 in this article) से कॉलम चुन रहे हैं।

आपको अपने विशिष्ट मामले के लिए सुनिश्चित करने के लिए निष्पादन योजना की जांच करनी होगी।

+1

अच्छा लेख, ठीक वही जो मैं खोज रहा था, धन्यवाद। जैसा कि आप अनुमान लगा सकते हैं, दिया गया है कि मैं इस सवाल को पहले स्थान पर पूछ रहा हूं, इस डीबी में एफके रिश्ते लगभग मौजूद नहीं हैं। अब मैं देख सकता हूं कि ऑप्टिमाइज़र को मूल रूप से इस परिदृश्य में मेरी मदद करने का कोई मौका क्यों नहीं है और मेरी निष्पादन योजना इसका सुझाव दे रही है। –

1

यदि आप उन तालिकाओं से फ़ील्ड नहीं खींचते हैं, तो EXISTS क्लॉज का उपयोग करना तेज़ हो सकता है - यह JOIN एड तालिका से डुप्लिकेट को आपके परिणामों में डुप्लिकेट भी रोक देगा।

1

भले ही ऑप्टिमाइज़र अनावश्यक जुड़ने को अनदेखा करता है, आपको अपने विशेष मामले को संभालने के लिए केवल एक और दृश्य बनाना चाहिए। विचारों का उपयोग और दुरुपयोग (जैसे इस मामले) हाथ से बाहर हो सकते हैं और obfuscation, भ्रम और बहुत महत्वपूर्ण प्रदर्शन मुद्दों के लिए नेतृत्व कर सकते हैं।

आप उस दृश्य को दोबारा विचार करने पर भी विचार कर सकते हैं जिसे आप "छोटे" दृश्यों के सेट में शामिल होने के लिए उपयोग कर रहे हैं ताकि वह उसी डेटा सेट को वितरित कर सके जो ... अब ऐसा करने के लिए समझ में आता है पाठ्यक्रम।

संबंधित मुद्दे