2013-06-04 4 views
5

मैं एक एसक्यूएल क्वेरी है कि मैं (नीचे) को क्रियान्वित करने कि चलाने के लिए 10 सेकंड ले लिया करने की कोशिश की है, और क्योंकि यह एक उत्पादन वातावरण पर था मैं तो बस सुनिश्चित करें कि कोई एसक्यूएल ताला चल रहा है होने के लिए इसे बंद कर दियाइन प्रश्नों में से एक को तेज़ी से क्या बनाता है?

SELECT TOP 1000000 * 
    FROM Table T 
    Where CONVERT(nvarchar(max), T.Data) like '%SearchPhrase%' --T.Data is initially XML 

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

SELECT TOP 1000000 * 
    FROM Table T 
    Where CONVERT(nvarchar(max), T.Data) like '%SearchPhrase%' --T.Data is initially XML 
    order by T.CreatedOn asc 

अब किकर है कि केवल के बारे में पंक्तियों लौटा दिए जाते हैं, जो मुझसे कहता है कि यहां तक ​​कि TOP 1000000 के साथ कौन-सी पंक्तियां यह अभी भी सभी पंक्तियों के माध्यम से हो रहा है पर कम रोक नहीं है।

मुझे मूलभूत समझ है कि SQL सर्वर कैसे काम करता है और क्वेरी पार्सिंग कैसे काम करती है, लेकिन मैं इस बात से उलझन में हूं कि इस स्थिति में ऑर्डर क्यों इतना तेज़ है।

सर्वर जा रहा रन एसक्यूएल सर्वर है 2008 R2

+1

प्रत्येक प्रश्न से 'एक्सप्लाइन प्लान' देखें और देखें कि वे चीजें कैसे करते हैं में अंतर क्या है। –

+1

क्या दो परिणाम हमेशा 10 सेकंड और 2 सेकंड में वापस आते हैं? – Kane

+0

@ केन यह ठीक है। मैं वास्तव में पहले व्यक्ति को कभी खत्म नहीं होने देता क्योंकि मैं नहीं चाहता था कि सर्वर संसाधनों को लॉक कर दें ** संपादित करें ** मैंने पहले व्यक्ति को पूरी तरह से चलाने दिया और इसमें 20 सेकंड लग गए (पंक्ति में 20 बार दो बार) –

उत्तर

5

अतिरिक्त प्रकार आपरेशन जाहिरा तौर पर एक समानांतर योजना का उपयोग करने एसक्यूएल सर्वर के लिए इस मामले में पर्याप्त है।

धीमी एक (ORDER BY के बिना) एक सीरियल योजना है तेजी से एक जिसका अर्थ है कि काम नहीं बल्कि सिर्फ एक एक से 24 धागे द्वारा किया जा रहा है 24 के DegreeOfParallelism है, जबकि।

यह इस तरह के अतिरिक्त काम के बावजूद बहुत कम समय बीतता है।

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