2012-09-13 10 views
5

मैं एक जटिल Oracle SQL क्वेरी लिखा है और समझाने योजना आँकड़े इस तरह दिखेगा देता है: लागत: 209,201 बाइट्स: 187,944,150 प्रमुखता: 409.675ओरेकल योजना की व्याख्या: प्रमुखता एक बड़ी संख्या देता है लेकिन क्वेरी कोई रिकॉर्ड

अब डीबीए क्वेरी देखते और आँकड़े इस तरह दिखेगा: लागत: 42,996 बाइट्स: 89,874,138 प्रमुखता: 209.226

मेरा पहला सवाल है, यदि संख्या कम कर रहे हैं, यह स्वतः ही बेहतर प्रदर्शन मतलब है? कौन सा नंबर सबसे अधिक मूल्यवान है? लागत/कार्डिनिटी/बाइट्स? मेरा दूसरा सवाल यह है: मैं समझता हूं कि कार्डिनलिटी पंक्तियों की संख्या पढ़ी जाती है। लेकिन जब मैं क्वेरी चलाता हूं, तो यह '0' पंक्तियां देता है! मेरी धारणा यह थी कि कार्डिनलिटी को दो प्रश्नों के लिए समान होना चाहिए जो समान परिणाम सेट लौटाए जाने वाले हैं। मुझे लगता है कि गलत है?

+0

कार्डिनेलिटी (बस डालें) पंक्तियों की संख्या ऑप्टिमाइज़र _thinks_ की आवश्यकता होगी; आंकड़ों के स्तर सहित कई कारकों के आधार पर, यह गलत हो सकता है। – Ben

+0

धन्यवाद। क्या आप बीईटीईएस की व्याख्या कर सकते हैं? – Victor

+1

@ कौशिक: प्रलेखन से, 'BYTES' "ऑपरेशन द्वारा उपयोग किए गए बाइट्स की संख्या के क्वेरी ऑप्टिमाइज़ेशन दृष्टिकोण द्वारा अनुमानित है।" लेकिन यह भ्रामक है, यह वास्तव में ऑपरेशन द्वारा बाइट्स * लौटा * की संख्या है। उदाहरण के लिए, यदि आपके पास पूर्ण टेबल स्कैन है, तो यह तालिका में प्रत्येक बाइट पढ़ेगा, लेकिन 'BYTES' किसी भी फ़िल्टर के बाद आकार * का अनुमान है। http://docs.oracle.com/cd/E11882_01/server.112/e16638/ex_plan.htm#r22c1-t12 –

उत्तर

3

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

दूसरे प्रश्न के लिए: सैद्धांतिक रूप से समकक्ष प्रश्नों को समान कार्डिनिटी वापस करनी चाहिए। आपकी टेबल की statictics पुरानी हो सकती है।

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