से पहले सॉर्ट करें मुझे अपने SQL सर्वर 2005 डेटाबेस में प्रदर्शन ऑर्डर करने में कोई समस्या है। चलें कहते हैं कि मैं निम्नलिखित प्रश्न हैं:एसक्यूएल सर्वर 2005 पूर्ण तालिका कर रहा है इंडेक्स स्कैन
select
id, versionId, orderIndex
from Forms_Page
where
versionId = 'AFCF4921-31B4-44C1-B3A7-913910F7600E'
order by
orderIndex
इस क्वेरी 7 पंक्तियों को वापस और 23 सेकंड का समय ~ निष्पादित करने के लिए होगा। इस क्वेरी की निष्पादन योजना निम्नानुसार है (अभी तक छवियां पोस्ट नहीं कर सकती है):
चयन करें (लागत: 0%) -> क्रमबद्ध करें (लागत: 11%) -> क्लस्टरर्ड इंडेक्स स्कैन (लागत: 89%)
अगर मैं 'ऑर्डर बाय' क्लॉज को हटा देता हूं, तो क्वेरी अपेक्षित की तरह ~ 4 एमएस में पूरी हो जाएगी।
अनुरोधित पंक्तियां प्राप्त करने से पहले SQL सर्वर एक प्रकार क्यों कर रहा है? यह मुझे समझ में नहीं आता है। क्यों पहली बार 7 पंक्तियां नहीं मिल रही हैं और केवल उनको छंटाई है? क्या मुझे डेटाबेस कॉन्फ़िगरेशन की तरह कुछ याद आ रहा है, या यह एक अपेक्षित व्यवहार है?
मैं नीचे की तरह एक आंतरिक चयन का उपयोग कर सकता हूं, ताकि इंजन को पंक्तियों को पहले और फिर ऑर्डर प्राप्त करने के लिए मजबूर किया जा सके, जो पंक्तियों को ~ 6 एमएस में वापस कर देगा, लेकिन चूंकि हम ईएफ का उपयोग कर रहे हैं, यह नहीं होगा हमारे लिए एक अच्छा समाधान (हम परिणामों को स्मृति में सॉर्ट कर सकते हैं, लेकिन हम कुछ इकाइयों के लिए लोडविथ विकल्प का उपयोग कर रहे हैं जो एसक्यूएल कोड उत्पन्न करते हैं, और वह कोड भी 'ऑर्डर बाय' समस्या से पीड़ित है)।
select *
from(
select
id, versionId, orderIndex
from Forms_Page
where
versionId = 'AFCF4921-31B4-44C1-B3A7-913910F7600E'
) T
order by
T.orderIndex
मैंने परीक्षण किया है कुछ इंडेक्सिंग सॉर्ट किए गए कॉलम हैं, जो चीजों को तेज करते हैं, लेकिन केवल इसलिए कि कॉलम पहले ही सॉर्ट किए गए हैं। एक गुंजाइश समाधान की तरह लगता है ...
क्लस्टर सूचकांक स्कैन कदम के आदेश -> क्रमबद्ध करें -> का चयन करें। जो आप देखते हैं उसे चुनें अंतिम चरण है, जो वास्तव में अपेक्षित आउटपुट देता है। (और आउटपुट को सॉर्ट किया जाना चाहिए) और योजना में "बड़ा कार्य" अनुमानित सूचकांक स्कैन है और सॉर्ट नहीं है। क्या आप निश्चित हैं कि निष्पादन योजना द्वारा आदेश के बिना स्कैन करने के लिए एक ही अनुक्रमणिका का उपयोग किया जाता है? –
हां, यह एक ही इंडेक्स का उपयोग करता है क्योंकि यह कुछ मैंने महसूस किया है, अब आपने जो कुछ बताया है, वह यह है कि एक साधारण खोज के लिए यह स्ट्रिंग को एक अद्वितीय पहचानकर्ता को बदलने के लिए IMPLICIT_CONVERT का उपयोग करता है, जबकि इसे {guid, 'AFCF4921- 31B4-44C1-B3A7-913910F7600E '}। मैंने कुछ परीक्षण किए और परिवर्तनों के साथ कुछ परीक्षण किए और मैं एक ही समय प्राप्त कर रहा हूं। –
संस्करण एक अद्वितीय कुंजी है? या आप डुप्लिकेट कर सकते हैं? यदि यह अद्वितीय है तो मैं उम्मीद करता हूं कि यह बहुत तेज हो। –