2008-11-20 17 views
11

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

लेकिन कहें कि मैं लिंग और मेरे विशेष डेटाबेस में उपयोगकर्ताओं को ढूंढना चाहता हूं, केवल 2% उपयोगकर्ता महिला हैं, फिर उस स्थिति में ऐसा लगता है कि महिला उपयोगकर्ता प्राप्त करते समय लिंग कॉलम उपयोगी सूचकांक होगा, लेकिन जब सभी पुरुष उपयोगकर्ताओं को नहीं मिल रहा है।

तो क्या आम तौर पर इस तरह के कॉलम पर इंडेक्स डालना अच्छा विचार होगा?

उत्तर

1

यह एक ऐसा मामला है जहां मैं सर्वर के आंकड़े बताता हूं कि इंडेक्स बनाने के लिए मुझे कब सूचित किया जाएगा। जब तक आप नहीं जानते कि यह क्वेरी प्रमुख होने जा रही है या ऐसी क्वेरी चलाने से आपके प्रदर्शन लक्ष्यों को प्राथमिकता मिलती है, तो समय-समय पर इंडेक्स बनाना, इसे बढ़ाने के बजाय आपको प्रदर्शन की लागत हो सकती है। साथ ही, आप इस बारे में सोचना चाहेंगे कि आप वास्तव में क्वेरी का उपयोग कैसे करेंगे। इस मामले में, मेरा अनुमान यह होगा कि आप आम तौर पर मानदंडों को पूरा करने वाले उपयोगकर्ताओं को चुनने के बजाय इस कॉलम के आधार पर कुछ प्रकार के एकत्रीकरण कर रहे होंगे। उस घटना में, आप टेबल स्कैन कर रहे होंगे वैसे भी और सूचकांक आपको कुछ भी नहीं खरीदेंगे।

3

खोज प्रदर्शन को बेहतर बनाने के लिए कम-कार्डिनालिटी कॉलम को इंडेक्स करना मेरी दुनिया में आम है। ओरेकल एक "बिटमैप्ड इंडेक्स" का समर्थन करता है जो इन स्थितियों के लिए डिज़ाइन किया गया है। संक्षिप्त अवलोकन के लिए this article देखें।

मेरा अधिकांश अनुभव ओरेकल के साथ है, लेकिन मुझे लगता है कि अन्य आरडीबीएमएस का समर्थन कुछ समान है।

2

हालांकि, यह मत भूलना कि आप शायद केवल 2% महिलाओं के लिए चयन करेंगे। शेष समय, आप पुरुषों की तलाश करेंगे। और इसके लिए, एक सीधी तालिका स्कैन (तालिका से डेटा तक पहुंचने वाले इंडेक्स स्कैन के बजाय) तेज हो जाएगा।

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

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

इंडेक्स डिज़ाइन पर पूरी किताबें हैं।

+0

आपका जवाब लिंग के बजाय अच्छा है, लेकिन मानते हैं,, हम प्रमुख शहरों या राज्यों में, जो केवल 100 नंबर में हैं, वितरित amongs 1 लाख उपयोगकर्ताओं, तो शायद 10 हजार उन भंडारण कर रहे हैं एक ही मूल्य है करेंगे, और हम देख रहे हैं केवल एक विशेष शहर के लिए है, तो मैं नहीं चाहता कि डीबी 1 लाख पंक्तियों पुनरावृति करना चाहते हैं, और सामान्य बी + सूचकांक इस उद्देश्य के लिए बहुत बुरा होगा, तो क्या इस मामले में अपने सुझाव हो जाएगा? –

+0

@Akash: देखने के अन्य दो जवाब - एक बिटमैप सूचकांक उपयुक्त हो सकता है, लेकिन यह क्या आपके प्रश्नों हैं पर निर्भर करता है। क्या आप एक ही शहर के लिए सभी 10,000 उपयोगकर्ताओं को वापस लौट रहे हैं? या आप कि Ciry से उन पर कुछ आंकड़े कर रहे हो? या फिर ... आपके उत्तर के लिए धन्यवाद –

+0

, एकल शहर के भीतर खोज रहा हूँ, लेकिन समस्या मैं कर रहा हूँ एसक्यूएल सर्वर है बिटमैप सूचकांक नहीं है, मुझे यकीन है कि मैं नवीनतम एसक्यूएल में नई सुविधाओं देखा नहीं किया नहीं कर रहा हूँ, मुझे आशा है कि यह नहीं है। –

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