2009-12-22 13 views
7

मैं बस एक वेब एप्लिकेशन पर काम कर रहा था और पाया कि अधिकांश mysql तालिकाओं में क्षेत्र हैं, जैसे is_live, can_do, required, published (और कई और) फ़ील्ड प्रकार TINYINT रखते हैं, और केवल 0 or 1 लेते हैं। मैं बस सोच रहा था कि क्या मुझे इन कॉलम पर इंडेक्स बनाने की ज़रूरत है क्योंकि स्क्रिप्ट्स जुड़ने का उपयोग कर रही हैं जिसमें इन कॉलम भी शामिल हैं। तो सवाल हैं:क्या मुझे mysql टेबल में tinyint फ़ील्ड प्रकारों पर इंडेक्स बनाना चाहिए?

क्या मुझे इन कॉलम में इंडेक्स भी जोड़ना चाहिए?

क्या मुझे इस प्रकार को किसी अन्य चीज़ में बदलना चाहिए?

कृपया यह प्रश्न हल करने के बजाय अवधारणा को समझने के साथ और अधिक करना है।

धन्यवाद।

उत्तर

6

मेरे डेटाबेस गुरु का कहना है के लिए स्वीकार्य है, "किसी भी सूचकांक यदि आप क्वेरी नहीं जानता कि जोड़ने कभी नहीं"। आपके मामले में, ऐसा लगता है कि आप क्वेरी को जानते हैं। तो हाँ, हम सूचकांक के बारे में सोच सकते हैं। यदि आपके पास डेटा वेयरहाउस प्रकार का सिस्टम है, तो बिटमैप इंडेक्स बनाएं। अन्यथा कोई अनुक्रमणिका नहीं बनाते हैं। बी-पेड़ इंडेक्स ऐसे छोटे कार्डिनिटी कॉलम पर खराब हैं।

0

मुझे संदेह है कि इन क्षेत्रों को इनपुट में इनपुट के रूप में 0 या 1 लेते समय शामिल किया जाता है।

इस मामले में एक सूचकांक का प्राथमिक उपयोग सीधे सूचकांक से डेटा पुनर्प्राप्त करने की क्षमता होगी, लेकिन सूचकांक काफी बड़ा होगा क्योंकि ओवरहेड अधिकतर इस अनिश्चितता को बनाएगा।

हालांकि आपके डेटासेट पर प्रयास करने का एकमात्र वैध दृष्टिकोण है, क्योंकि आपके द्वारा उपयोग किए जा रहे डेटा के परिणाम पर महत्वपूर्ण प्रभाव हो सकता है।

0

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

+0

इस मामले में enum का उपयोग करने में क्या बात है? –

+0

@ पीटर, उन फ़ील्ड के लिए जिन्हें 0 या 1 जैसे मानों का एक निश्चित सेट माना जाता है, यह बेहतर या पारंपरिक उपयोग एनम प्रकार है। – Sarfraz

+0

बूल के बारे में कैसे? – user187580

-1

निर्णय लेना सूचकांक करने के लिए है या नहीं डेटा प्रकार पर निर्भर नहीं होना चाहिए, लेकिन

  • पर आप क्षेत्र के लिए खोज करेंगे कि कितनी बार
  • कितने रिकॉर्ड तालिका होगा (परिमाण के क्रम)
  • कि क्या गैर सूचीबद्ध क्वेरी (पूर्ण तालिका स्कैन) के लिए इंतजार उपयोगकर्ता
+0

कार्डिनलिटी भी महत्वपूर्ण है, और डेटाटाइप अपने कॉलम की कार्डिनालिटी के बारे में कुछ बताते हैं। –

17

सामान्य सलाह यह है कि बूलियन क्षेत्र पर एक सूचकांक शायद ही कभी उपयोगी होगा।

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

ओरेकल और पोस्टग्रेस जैसे कुछ डेटाबेस इंजन Bitmap Indexes का समर्थन करते हैं। बिटमैप इंडेक्स पारंपरिक रूप से लिंग (पुरुष या महिला) जैसे डेटा के लिए अच्छी तरह से काम करने के लिए विचार किया गया है, जिसमें विशिष्ट मूल्यों की एक छोटी संख्या है, लेकिन उन मूल्यों की कई घटनाओं के साथ।

MySQL वर्तमान में बिटमैप इंडेक्स का समर्थन नहीं करता है, लेकिन इसकी "index_merge" सुविधा का उपयोग कर समान कार्यक्षमता प्राप्त कर सकता है। बिटमैप इंडेक्स को फाल्कन इंजन (Source) के साथ पेश किया जाना चाहिए।

+0

क्या आपको मतलब है कि मैं टिन्यिनट से BOOL में बदलूं? – user187580

+0

नहीं, इससे मदद नहीं मिलेगी। बिटमैप इंडेक्स जानकारी के लिए –

+0

+1। धन्यवाद, मुझे यह नहीं पता था। –

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