क्या मुझे टेबल पर एक नया एकल कॉलम इंडेक्स जोड़ने की आवश्यकता है यदि उस क्षेत्र पर एक मल्टी-कॉलम इंडेक्स पहले से मौजूद है?


10

मैं एक बहु-स्तंभ के साथ एक मेज है UNIQUEपर सूचकांक _job_id__और __keyword_id__

__job_id__अगर मुझे GROUP BYउस कॉलम पर लगातार क्वेरी करनी हो तो क्या मुझे एक और सूचकांक जोड़ने की आवश्यकता होगी ?

(100 मिलियन पंक्तियों में इसे थोड़ा समय लग सकता है। यही कारण है कि मैं सिर्फ करने के बजाय पूछ रहा हूं)


यदि आपका वास्तविक प्रश्न एक धीमी क्वेरी के बारे में है, तो कृपया SHOW CREATE TABLE SHOW TABLE STATUS SHOW VARIABLES '% बफर%' का चयन करें 'का चयन करें ... कितना RAM उपलब्ध है? कई संभावित कारण हैं; ज्यादातर उन वस्तुओं को देखकर देखा जा सकता है।
रिक जेम्स

जवाबों:


5

नहीं, बिलकुल नहीं !!! यदि अनुक्रमणिका में मुख्य कॉलम (s) की जरूरत सबसे कम है तो MySQL क्वेरी ऑप्टिमाइज़र सही काम करेगा। यदि आपने ऐसा कोई इंडेक्स बनाया है, तो MySQL क्वेरी ऑप्टिमाइज़र उस इंडेक्स का उपयोग न करने का विकल्प चुन सकता है यदि आप हमेशा GROUP BY job_id, keyword_id करते हैं। यदि आप केवल job_id द्वारा रिकॉर्ड एकत्र करते हैं, तो MySQL क्वेरी ऑप्टिमाइज़र इंडेक्स का उपयोग कर सकता है या नहीं भी कर सकता है, लेकिन तब आपके पास वैसे भी एक अनावश्यक इंडेक्स बर्बाद करने वाला स्थान होता है।

यदि तालिका MyISAM है, तो ऐसा सूचकांक बनाना MYI फ़ाइल को फूला देगा।

यदि तालिका InnoDB है और innodb_file_per_table 0 है, तो इस तरह का सूचकांक बनाना ibdata1 होगा।

यदि तालिका InnoDB है और innodb_file_per_table 1 है, तो ऐसा सूचकांक बनाना तालिका की .ibd फ़ाइल को केवल ब्लोट करेगा।

सारांश में, आपको उस अतिरिक्त सूचकांक को बनाने की आवश्यकता नहीं है !!!


क्या आपको यकीन है? यह आदमी अन्यथा सुझाव देता है: stackoverflow.com/questions/179085/… या यह MySQL से MSSQL से अलग है?
तद्ज

4

अनुक्रमित केवल छँटाई को कमgroup by करके संचालन को गति दे सकते हैं - यह अधिक कुशल होगा यदि प्रयुक्त सूचकांक क्लस्टर सूचकांक है या कम से कम क्लस्टर प्रमुख के रूप में एक ही अग्रणी स्तंभ है। इस सब में मैं मान रहा हूं कि MySQL के पास ऑपरेशन के बराबर नहीं है जो आमतौर पर सभी अनुक्रमित के किसी भी लाभ को दरकिनार कर देगा - शायद कोई और इस बात की पुष्टि कर सकता है।hash group by

job_idयह मानने पर एक अलग सूचकांक होने का मामूली लाभ है कि group byखंड में एकमात्र स्तंभ है और न ही क्लस्टर सूचकांक है: सूचकांक छोटा होगा और इसलिए इसे स्कैन करने से कम I / O उत्पन्न होगा

--EDIT--

चूंकि एक इंडेक्स में क्लस्टर इंडेक्स कुंजी के लिए परिभाषित सभी प्राथमिक कुंजी फ़ील्ड शामिल हैं जो द्वितीयक इंडेक्स में नहीं हैं , एक इंडेक्स job_idकेवल एक इंडेक्स से छोटा होगा job_id, keyword_idयदि keyword_idक्लस्टर किए गए इंडेक्स का हिस्सा नहीं है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.