मैं SQL सर्वर 2008 के xml डेटाटाइप के साथ कुछ क्रूड बेंचमार्क कर रहा हूं। मैंने कई स्थानों को देखा है जहां .exist
where
क्लॉज में उपयोग किया जाता है। मैंने हाल ही में दो प्रश्नों की तुलना की है और अजीब परिणाम मिल गए हैं।एक खंड में तेजी से .exist या .value कौन सा है?
select count(testxmlrid) from testxml
where Attributes.exist('(form/fields/field)[@id="1"]')=1
इस क्वेरी के बारे में 1.5 सेकंड चलाने के लिए किसी अनुक्रमित के साथ कुछ भी लेकिन प्राथमिक कुंजी (testxmlrid) पर ले जाता है,
select count(testxmlrid) from testxml
where Attributes.value('(/form/fields/field/@id)[1]','integer')=1
otherhand पर इस क्वेरी चलाने के लिए .75 के बारे में सेकंड लेता है।
मैं अनियमित एक्सएमएल का उपयोग कर रहा हूं और मेरा बेंचमार्किंग SQL सर्वर 2008 एक्सप्रेस इंस्टेंस पर हो रहा है। डेटासेट में लगभग 15,000 पंक्तियां हैं और प्रत्येक एक्सएमएल स्ट्रिंग लगभग 25 लाइन लंबी है।
क्या ये परिणाम सही हैं? यदि हां, तो हर कोई .exist
का उपयोग क्यों करता है? क्या मैं कुछ गलत कर रहा हूं और .exist
तेज हो सकता है?
करता है 'मौजूद हैं()' शॉर्ट सर्किट जैसे ही यह पहली घटना वैसे भी पाता है? – Yuck
@Yuck - हाँ यह करता है लेकिन इस मामले में '.exist' क्वेरी' @ id = 1' की उपस्थिति की खोज कर रही है। यदि पहली घटना यदि '@ id' 1 से अधिक कुछ है तो यह खोज जारी है। '.value' क्वेरी' @ id' की पहली घटना के मान को देखती है और यह मान जारी नहीं रखती है कि क्या मान 1 नहीं है। –