2010-04-09 10 views
6

एसक्यूएल में बयान के निष्पादन के आदेश के संबंध में के आदेश, निम्नलिखित प्रदर्शन बुद्धिमान के बीच कोई अंतर है?टी/एसक्यूएल क्षमता और निष्पादन

SELECT * FROM Persons 
WHERE UserType = 'Manager' AND LastName IN ('Hansen','Pettersen') 

और:

SELECT * FROM Persons 
WHERE LastName IN ('Hansen','Pettersen') AND UserType = 'Manager' 

अगर कोई अंतर नहीं है, वहाँ शायद एक लिंक आदि आप हो सकता है, जहां एक इस बारे में अधिक सीख सकते हैं?

धन्यवाद एक टन,

केली

+0

नहीं, क्योंकि इसका निष्पादन के आदेश पर कोई प्रभाव नहीं पड़ता है। – RBarryYoung

उत्तर

4

अनुकूलक, क्योंकि यह एक लागत आधारित अनुकूलक का उपयोग करता है, जो तय करेगा "मार्ग" सबसे अच्छा है: यह विकल्प आंकड़ों के आधार पर खर्च होंगे और फिर वहाँ से चलते हैं। शर्तों के क्रम में कोई फर्क नहीं पड़ता है (हालांकि आप चीजों को कैसे घोंसला करते हैं, इससे कोई फर्क पड़ सकता है)।

संपादित करें: Oracle किया करते थे - काफी हाल ही में जब तक - एक नियम आधारित अनुकूलक (RBO), लेकिन यह has now been phased out। चूंकि आरबीओ आंकड़ों से काम नहीं करता था, भविष्यवाणियों के आदेश के आधार पर क्वेरी योजनाओं में अंतर देखना संभव था।

0

सभी प्रमुख SQL डेटाबेस में, कोई फर्क नहीं है।

+0

मुझे ओरेकल के बारे में यह दिलचस्प लगता है, जहां यह एक छोटा अंतर कर सकता है। http://www.dba-oracle.com/Oracle_tips_sql_predicate_order.htm – brydgesk

0

कोई फर्क नहीं पड़ता। दोनों के परिणामस्वरूप एक ही निष्पादन योजना होगी।

2

कोई फर्क नहीं पड़ता। आप SQL सर्वर में क्वेरी को खींच सकते हैं और प्रदर्शन अनुमानित निष्पादन योजना आइकन पर क्लिक कर सकते हैं और दो प्रश्नों के लिए निष्पादन योजना की जांच कर सकते हैं। वे समान होना चाहिए।

1

ऑप्टिमाइज़र भविष्यवाणियों को पुनर्व्यवस्थित और निष्पादित करने के लिए स्वतंत्र है क्योंकि यह डेटा को पुनर्प्राप्त करने के लिए सबसे अधिक कुशल/लागत प्रभावी लगता है।

Does the order of criteria the WHERE clause matter?

1

मैं निम्नलिखित link जोड़ देंगे।

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

हालांकि, यह ध्यान दिया जाना चाहिए कि योजनाकार सही नहीं हैं और वे केवल लागत का अनुमान लगाते हैं, इसलिए कुछ मामलों में (आपको पता है कि आपकी क्वेरी प्लानर की विवरणों में सीमाएं कैसे हैं) आप मदद के लिए अपनी क्वेरी शर्तों को फिर से लिख सकते हैं योजनाकार एक बेहतर रास्ता देखते हैं।

यह (यदि भी संभव) केवल प्रश्नों कि महत्वपूर्ण साबित हो रहे हैं और यह भी ध्यान दें कि अनुकूलन के इस प्रकार बातें धीमा हो सकता है जब डेटा आंकड़े बदलाव के लिए प्रयास किया जाना चाहिए।

इसके अलावा, ज्यादातर मामलों में वहाँ बेहतर तरीके (अनुक्रमित बदलते) प्रश्नों का अनुकूलन करने के हैं, और इस क्वेरी योजनाकार के लिए छोड़ दिया जाना चाहिए।

RDBMS के मुख्य बिंदुओं में से एक था नहीं निर्दिष्ट करने के लिए डेटा पुनः प्राप्त करने के लिए कैसे (प्रश्नों की कथात्मक प्रकृति) - और ज्यादातर मामलों में आज के प्रश्न योजनाकारों आप के लिए एक अच्छी योजना मिल जाएगा।

+0

+1 धन्यवाद अंतर्दृष्टि के लिए धन्यवाद –

0

SQL सर्वर 2000 में एक अंतर है। मेरे पास इस के साथ बहुत सारे सिरदर्द थे। स्पष्ट रूप से यह मूल्यांकन करता है कि क्रम में कहां खंडित किए गए हैं। यह निर्दिष्ट करने के लिए कि क्या मैं एक इंडेक्स के माध्यम से फ़िल्टर किया गया डेटा चाहता था, मुझे विवरण से INDEN (INDEX (MY_INDEX_NAME1, MY_INDEX_NAME2) क्लॉज जोड़ना था।

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