2013-03-07 6 views
6

मेरे पास एक प्रश्न है जिसमें सशर्त तर्क शामिल करने की आवश्यकता है। ऐसे 4 मामले हैं जिन पर विचार किया जाना चाहिए, और परिणामस्वरूप सेट अलग हैं।एसक्यूएल केस स्टेटमेंट वीएस यूनियन सभी प्रदर्शन

मैं या तो एक एकल SELECT और CASE/WHEN बयानों का उपयोग कर या एक से अधिक SELECT बयानों और UNION ALL का उपयोग कर क्वेरी को लागू कर सकते हैं।

सामान्य रूप से, इनमें से एक कार्यान्वयन दूसरे की तुलना में तेज़ होने की संभावना है? यदि हां, तो क्यों?

+3

उत्तर कई चरों पर निर्भर हो सकता है जो आपकी पोस्ट में शामिल करना आसान हो सकता है या नहीं। क्या आपने "व्याख्या" योजनाओं की तुलना की है? – bernie

+0

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

उत्तर

0

एक संघ ऐसा करता है कि कई लोग एक साथ चयन करते हैं, तो आम तौर पर आईएमएचओ बेहतर होगा यदि कथन से जटिल नहीं है और अन्य सभी चीजें बराबर हैं। लेकिन वे समान एसक्यूएल परिणाम नहीं हैं:

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

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

0

यह वास्तव में इस बात पर निर्भर करता है कि आप किस तर्क और डेटा से दिखने की उम्मीद कर रहे हैं। यदि आप विशाल डेटासेट के खिलाफ यह चयन चला रहे हैं और तर्क काफी सरल है जैसे ए और बी के बीच वैल वैल सी, तो संभवत: आपको अपने उत्थान में तर्क डालने और यूनियन को करने के लिए एक अपलिफ्ट का थोड़ा सा हिस्सा मिलेगा लेकिन नहीं अंतर का एक टन। तुलनात्मक रूप से छोटे डेटा सेट पर, इससे कोई फर्क नहीं पड़ता है। यह इस बात पर भी निर्भर हो सकता है कि आप इस कोड को पत्थर में सेट कर रहे हैं या नहीं, या समय-समय पर परिवर्तन के अधीन हैं। यूनियन सभी निश्चित रूप से कोड की कुछ और पंक्तियां होंगी, क्योंकि आप मूल रूप से अलग-अलग WHERE खंडों के साथ एक ही प्रश्न लिख रहे हैं, लेकिन इसे पढ़ने और बनाए रखना भी आसान हो सकता है।

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