मैं एक एसक्यूएल क्वेरी है कि मैं (नीचे) को क्रियान्वित करने कि चलाने के लिए 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
प्रत्येक प्रश्न से 'एक्सप्लाइन प्लान' देखें और देखें कि वे चीजें कैसे करते हैं में अंतर क्या है। –
क्या दो परिणाम हमेशा 10 सेकंड और 2 सेकंड में वापस आते हैं? – Kane
@ केन यह ठीक है। मैं वास्तव में पहले व्यक्ति को कभी खत्म नहीं होने देता क्योंकि मैं नहीं चाहता था कि सर्वर संसाधनों को लॉक कर दें ** संपादित करें ** मैंने पहले व्यक्ति को पूरी तरह से चलाने दिया और इसमें 20 सेकंड लग गए (पंक्ति में 20 बार दो बार) –