2009-06-30 11 views
5

क्या कोई चयन क्वेरी अलग-अलग इंडेक्स का उपयोग कर सकती है यदि कोई स्थिति कहां बदलती है?समान क्वेरी विभिन्न इंडेक्स का उपयोग करती है?

दो निम्नलिखित प्रश्नों अलग अनुक्रमणिका का उपयोग करें और फर्क सिर्फ इतना है हालत और typeenvoi = 'निर्यात' या और typeenvoi = 'मेल'

select numenvoi,adrdest,nomdest,etat,nbessais,numappel,description,typeperiode,datedebut,datefin,codeetat,codecontrat,typeenvoi,dateentree,dateemission,typedoc,numdiffusion,nature,commentaire,criselcomp,crisite,criservice,chrono,codelangueetat,piecejointe, sujetmail, textemail 
      from v_envoiautomate 
      where etat=0 and typeenvoi='EXPORT' 
      and nbessais<1 


select numenvoi,adrdest,nomdest,etat,nbessais,numappel,description,typeperiode,datedebut,datefin,codeetat,codecontrat,typeenvoi,dateentree,dateemission,typedoc,numdiffusion,nature,commentaire,criselcomp,crisite,criservice,chrono,codelangueetat,piecejointe, sujetmail, textemail 
      from v_envoiautomate 
      where etat=0 and typeenvoi='MAIL' 
      and nbessais<1 

किसी को भी मुझे एक स्पष्टीकरण दे सकते हैं का मूल्य है?

उत्तर

8

एसक्यूएल सर्वर में हिस्टोग्राम-प्रकार डेटासेट में इंडेक्स पर विवरण सांख्यिकी के रूप में संग्रहीत किया जाता है।

प्रत्येक सूचकांक श्रेणियों में chunked है, और प्रत्येक रेंज उस सीमा के भीतर कुंजी मान का एक सारांश में शामिल है, जैसी चीजों:

  • रेंज उच्च मूल्य
  • रेंज
  • संख्या में मानों की संख्या रेंज (प्रमुखता) में अलग-अलग मान उच्च मूल्य के बराबर
  • मानों की संख्या की

... एक डी इतने पर।

आप के साथ एक दिया सूचकांक पर आंकड़े देख सकते हैं:

DBCC SHOW_STATISTICS(<tablename>, <indexname>) 

प्रत्येक सूचकांक घनत्व, और अंततः चयनात्मकता की तरह विशेषताओं के एक जोड़े है, कि कैसे अद्वितीय में प्रत्येक मान क्वेरी अनुकूलक बता एक सूचकांक होने की संभावना है, और यह सूचकांक रिकॉर्ड को तुरंत ढूंढने में कितना कुशल है।

चूंकि आपकी क्वेरी में क्लॉज में तीन कॉलम हैं, तो संभव है कि इनमें से किसी भी कॉलम में एक इंडेक्स हो जो ऑप्टिमाइज़र के लिए उपयोगी हो। यह भी संभावना है कि अन्य प्रमुख इंडेक्स की चयनशीलता की स्थिति में प्राथमिक कुंजी सूचकांक पर विचार नहीं किया जाएगा।

आखिरकार, यह ऑप्टिमाइज़र को उबालता है कि आपके प्रत्येक गैर-क्लस्टर इंडेक्स + बुकमार्क्स लुकअप को पढ़ने के लिए कितने पेज पढ़ना आवश्यक होगा, अन्य मानों के साथ तुलना के साथ, तालिका स्कैन कर बनाम ।

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

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

2

शायद "कार्डिनिटी" के साथ करना है, मुझे विश्वास है कि शब्द तालिका में मूल्यों का है। यदि उस खंड से मेल खाने वाली बहुत अधिक पंक्तियां हैं, तो SQL सर्वर यह तय कर सकता है कि एक क्वेरी एक अलग कॉलम के लिए इंडेक्स का उपयोग करके अधिक कुशल होगी। यह एक चरम मामला है, लेकिन अगर 'पंक्ति' से मेल खाने वाली एक पंक्ति थी, तो संभवतः वह उस सूचकांक का उपयोग करेगी। यदि तालिका में हर दूसरी पंक्ति 'निर्यात' थी, लेकिन उनमें से केवल आधे 'निर्यात' पंक्तियों में etat 0 था, तो शायद यह उस कॉलम पर सूचकांक का उपयोग करेगा।

+1

@ लाज़ी बॉबो: आप अपने तर्क में सही हैं, हालांकि मुझे विश्वास है कि "शब्द" जिसे आप ढूंढ रहे हैं वह "चुनिंदाता" है यानी एक स्तंभ की चुनिंदाता जो डेटा मानों के वितरण पर आधारित है –

4

SQL सर्वर में क्वेरी ऑप्टिमाइज़र (जैसा कि अधिकांश आधुनिक डीबीएमएस प्लेटफार्मों में) एक प्रक्रिया का उपयोग करता है जिसे 'लागत आधारित अनुकूलन' कहा जाता है। ऐसा करने के लिए यह आवश्यक I/O की मात्रा का अनुमान लगाने के लिए डेटाबेस में तालिकाओं के बारे में आंकड़ों का उपयोग करता है। ऑप्टिमाइज़र कई अर्थात् समकक्ष क्वेरी योजनाओं पर विचार करेगा जो यह बयान को पार्स करके उत्पन्न मूलभूत क्वेरी योजना को बदलकर उत्पन्न करता है।

प्रत्येक योजना का परीक्षण टेबल के बारे में बनाए गए आंकड़ों के आधार पर एक ह्युरिस्टिक द्वारा लागत के लिए किया जाता है। आंकड़े विभिन्न रूपों में आता है:

  • टेबल और सूचकांक पंक्ति में गिना जाता है

  • वितरण अलग-अलग स्तंभों में मानों की हिस्टोग्राम।

बनाम वितरण हिस्टोग्राम में 'निर्यात' 'मेल' की ocurrence काफी अलग है, तो क्वेरी अनुकूलक अलग इष्टतम योजनाओं के साथ आ सकते हैं। यह शायद हुआ क्या हुआ।

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