2015-11-20 12 views
5

किसी भी संबंधित डेटाबेस में, हम क्वेरीज को बढ़ावा देने वाले इंडेक्स बना सकते हैं। लेकिन अधिक इंडेक्स बनाने से अपडेट/डालने की गति को नुकसान पहुंचा सकता है क्योंकि डीबी सिस्टम को प्रत्येक इंडेक्स को अपडेट करना होगा जब नया डेटा आ रहा है (डालें, अपडेट करें, मर्ज करें)सिंगल या समग्र कॉलम इंडेक्स के बीच क्या अंतर है?

हम एक उदाहरण का उपयोग करते हैं। हम एक सूचकांक index1 जोड़ें सूचकांक index1 (order_id एएससी, buyer_id एएससी) कहा जाता है बना सकते हैं या हम 2 अनुक्रमित, index2 और index3 जोड़ें सूचकांक बना सकते हैं index2 (order_id एएससी) जोड़ें सूचकांक index3 (buyer_id एएससी)

इस की तरह एक क्वेरी में * tablename से चुनें जहां order_id> 100 और buyer_id> 100

कौन सा तेज़ है? इंडेक्स 1 या इंडेक्स 2 और इंडेक्स 3 का उपयोग करके?

समीकरण के दूसरी तरफ, डालने या अपडेट करने पर, मुझे लगता है कि यह केवल 2 के बजाय एक इंडेक्स का उपयोग करने के लिए बहुत तेज होगा, लेकिन मैंने इसे MySQL या MSSQL सर्वर के विरुद्ध परीक्षण नहीं किया है, इसलिए मैं नहीं हो सकता बिलकुल पक्का। अगर किसी को उस मामले पर अनुभव है, तो कृपया इसे साझा करें।

और आखिरी बात int टाइप किए गए मानों के बारे में है, मैंने सोचा कि इंट टाइप कॉलम के लिए इंडेक्स बनाने के लिए यह संभव या प्रासंगिक नहीं है क्योंकि यह क्वेरी समय को बढ़ावा नहीं देता है, क्या यह सच है?

+2

यह भी ध्यान रखें कि एसक्यूएल सर्वर और माइस्क्ल में अनुक्रमण अलग-अलग हैं, इसलिए इस प्रश्न को दोनों के साथ टैग करना समस्याग्रस्त है क्योंकि दोनों के पास अलग-अलग उत्तर हो सकते हैं। – Vanlightly

+0

मैं इस लिंक को जोड़ने का इरादा रखता हूं http://stackoverflow.com/questions/179085/multiple-indexes-vs-multi-column-indexes –

+0

मेरा प्रश्न दोनों पढ़ने और हानिकारक WRITE दक्षता में सुधार करने पर अधिक केंद्रित है जबकि दूसरा केवल पढ़ने के संचालन पर अधिक ध्यान केंद्रित है। – shawhu

उत्तर

0

आपके द्वारा उल्लिखित सटीक क्वेरी के लिए मैं व्यक्तिगत रूप से index1 (आपके पास दोनों स्थितियों के लिए एक खोज ऑपरेशन होगा) के लिए जाना होगा। यदि आप order_id केवल फ़िल्टर करते हैं, तो उसी सूचकांक को भी नौकरी करना चाहिए (क्योंकि order id इंडेक्स का पहला स्तंभ है, इसलिए यदि आप खरीदार को छोड़ देते हैं तो भी उसी बीटीआरई संरचना को तब भी मदद करनी चाहिए)। अगर आप केवल buyer_id के आधार पर फ़िल्टर (क्योंकि BTREE सूचकांक सृजन बयान के अनुसार लापता order_id द्वारा सबसे पहले बनाया जाता है)

एक ही समय index1 पर ज्यादा मदद नहीं होता। आप शायद index1 के साथ इंडेक्स स्कैन के साथ समाप्त हो जाएंगे, जबकि अलग-अलग सूचकांक अभी भी उस परिदृश्य में काम करेंगे (index3 पर एक खोज की अपेक्षा की जानी चाहिए)।

+1

चूंकि दोनों भाग "श्रेणियां" हैं, इसलिए एक समग्र सूचकांक कोई लाभ नहीं प्रदान करता है। –

+0

हम्म ... एक दूसरे विचार पर मैं वास्तव में आप जो कह रहे हैं उससे सहमत हूं। –

0

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

आपके मामले में, आमतौर पर केवल एक ही खरीदार बहुत ही चुनिंदा इंडेक्स ऑर्डर_आईडी नहीं है, buyer_id (संचालन में शामिल होने के लिए सुखद उपयोग) क्योंकि यह अधिक के विपरीत, buyer_id, order_id होगा, ताकि ऑर्डर के लिए खोज की सुविधा मिल सके। खरीदार

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