2012-08-28 18 views
6

में चुनिंदाता की भूमिका मैं कई एसक्यूएल किताबों और लेखों में पढ़ रहा हूं कि चयनशीलता इंडेक्स बनाने में एक महत्वपूर्ण कारक है। यदि किसी कॉलम में कम चयनकता है, तो एक इंडेक्स की तलाश में अच्छा नुकसान होता है। लेकिन लेखों में से कोई भी क्यों समझाता है। क्या कोई यह समझा सकता है कि ऐसा क्यों है, या किसी प्रासंगिक आलेख का लिंक प्रदान करें?इंडेक्स स्कैन/चुनिंदा

उत्तर

7
रॉबर्ट शेल्डन द्वारा SimpleTalk लेख से

: 14 SQL Server Indexing Questions You Were Too Shy To Ask

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

  • This forum post SqlServerCentral पर पर पिनाल डेव
  • this other द्वारा

    • चेक this post आप भी मदद कर सकते हैं:

  • इसके अलावा इन लेखों की जाँच करें।

  • This article SqlServerCentral पर भी
  • SqlServerCentral लेख से:

    सामान्य तौर पर, nonclustered अनुक्रमणिका चयनात्मक होना चाहिए। यही है, कॉलम में मान काफी अद्वितीय होना चाहिए और उस पर क्वेरी फ़िल्टर करें जो तालिका के छोटे हिस्से को वापस करनी चाहिए।

    इस का कारण यह है कि कुंजी/RID लुकअप महंगा संचालन कर रहे हैं और nonclustered अनुक्रमणिका एक प्रश्न यह की जरूरत को कवर या पर्याप्त रूप से चयनात्मक कि लुकअप की लागत नहीं कर रहे हैं होने के लिए मूल्यांकन करने के लिए प्रयोग की जाने वाली है अगर बहुत अधिक माना जाता है।

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

    यह ध्यान रखना महत्वपूर्ण है कि यह केवल अग्रणी कॉलम पर लागू नहीं होता है। ऐसे परिदृश्य हैं जहां एक बहुत ही अचूक कॉलम अग्रणी कॉलम के रूप में उपयोग किया जा सकता है, इंडेक्स में बनाने वाले अन्य कॉलम के साथ यह उपयोग करने के लिए पर्याप्त चुनिंदा है। (SQL सर्वर के अपने मौजूदा ज्ञान के आधार पर)

    +0

    आपका स्वागत है, डाउनटाइम से बचने के लिए उत्पादन में भागने से पहले परीक्षण करना सुनिश्चित करें और इसलिए उपयोगकर्ताओं से गुस्सा चेहरे;) – Yaroslav

    2

    मैं एक बहुत ही सरल व्याख्या लिखने की कोशिश:

    इसका मतलब है कि एक सूचकांक कम चयनात्मकता है कि एक ही मूल्य के लिए कुल पंक्तियों के बड़े प्रतिशत मिल गया।(जैसे 500 पंक्तियों में से 200 आपके सूचकांक पर समान मूल्य रखते हैं)

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

    तो जब आप दो चरणों का उपयोग करके इस तरह की एक खोज देखते हैं। और यहां चुनिंदाता आती है:

    अधिक परिणाम आपको कम चुनिंदाता के कारण इंजन को और अधिक काम करने के लिए मिलता है। इसलिए इस तथ्य के कारण कुछ मामले हैं जहां एक टेबल स्कैन भी अधिक कुशल है तो एक सूचकांक बहुत कम चुनिंदाता के साथ खोज करता है।

    +0

    लेकिन तालिका स्कैन के लिए परिणामों की संख्या भी अधिक है। कम से कम इंडेक्स की तलाश में, समान रिकॉर्ड वाले डेटा ब्लॉक के हिस्से में कूद तेजी से है। – SexyBeast

    +1

    लेकिन टेबल स्कैन द्वारा आप ओबे रिकॉर्ड पढ़ रहे हैं, दो बार नहीं। और आपको एसएसडी हार्डड्रिव्स में "हेडमोव" समय की गणना करना है जो पूरी प्रक्रिया में सबसे अधिक लागत है। –

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