2010-08-18 18 views
7

ठीक है, इसलिए मैं एक प्रश्न है:एसक्यूएल सर्वर 'में' या 'या' जो सबसे तेजी से

select distinct(a) 
from mytable 
where 
b in (0,3) 

क्या, तेजी से होने जा रहा है ऊपर या

select distinct(a) 
from mytable 
where 
b = 0 
or 
b = 3 

वहाँ है एक सामान्य नियम?

धन्यवाद

+0

क्या आपने इसे स्वयं नहीं किया? –

उत्तर

4

दोनों IN और ORb = 0b = 3 के लिए एक के बाद के लिए एक प्रश्न करना होगा, और फिर एक मर्ज दो परिणाम सेट पर शामिल होने के करते हैं, और अंत में किसी भी डुप्लिकेट को फ़िल्टर।

IN के साथ, डुप्लिकेट वास्तव में, मतलब नहीं है क्योंकि b दोनों नहीं हो सकता 0 और 3, लेकिन तथ्य यह है कि INb = 0 OR b = 3 में परिवर्तित हो जाएगा है, और OR साथ, मेकअप भावना कर डुप्लिकेट क्योंकि आपके पास b = 0 OR a = 3 हो सकता है, और यदि आप दो अलग-अलग परिणाम सेट में शामिल होना चाहते थे, तो आप दोनों मानदंडों से मेल खाने वाले प्रत्येक रिकॉर्ड के लिए डुप्लीकेट के साथ समाप्त हो सकते हैं।

तो एक डुप्लिकेट फ़िल्टरिंग हमेशा किया जाएगा, भले ही आप IN या OR का उपयोग कर रहे हों।

select distinct(a) 
from mytable 
where 
b = 0 

UNION ALL 

select distinct(a) 
from mytable 
where 
b = 3 
: - जैसा कि सामान्यतः होता है जब आप IN का उपयोग कर रहे है - हालांकि, अगर आप शुरू से जानते हैं कि आप किसी भी डुप्लिकेट नहीं होगा तो आप जो बाहर डुप्लिकेट फ़िल्टर नहीं करता UNION ALL का उपयोग करके कुछ प्रदर्शन हासिल कर सकते हैं
7

जहाँ तक मुझे पता है, INOR में धर्मान्तरित। तो प्रदर्शन वही है। इसे लिखने का एक छोटा रास्ता।

6

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

ऐसा करने के लिए:

  1. एक नई Sql Sever प्रबंधन स्टूडियो क्वेरी खिड़की
  2. सही अंतरिक्ष में विंडो पर क्लिक करें आप में
  3. पर क्लिक करें "टाइप किया है में अपनी क्वेरी (रों) रखो वास्तविक निष्पादन योजना "
  4. आपकी क्वेरी चलाने के रूप में आप आमतौर पर

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

+0

+1। एफडब्ल्यूआईडब्ल्यू, मैंने यह किया और योजनाएं वास्तव में समान हैं। – harpo

+0

@harpo, हाँ, यह कहने का मेरा लंबा हवादार तरीका था "यहां स्वयं को कैसे काम करना है, क्योंकि मुझे पता है कि यह वही होगा लेकिन आप इसे खोजने के लिए और अधिक प्राप्त करेंगे" OP = – Rob

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