/ / MySQL में मल्टी लेवल इंडेक्स कैसे बनाएं और कॉलम को कैसे ढूंढें मल्टी लेवल अनुक्रमित है? - mysql, अनुक्रमण, डेटाबेस प्रदर्शन, गैर क्लस्टर-सूचकांक

MySQL में मल्टी-स्तरीय इंडेक्स कैसे बनाएं और कॉलम को कैसे ढूंढें मल्टी लेवल अनुक्रमित है? - mysql, अनुक्रमण, डेटाबेस प्रदर्शन, गैर क्लस्टर-सूचकांक

मेरे पास एक टेबल है "गतिविधियों"। इसमें लगभग 1 मिलियन रिकॉर्ड होते हैं। इसके कॉलम बंद हैं,

आईडी (पीके), u_id (एफके), cl_id (एफके), activity_log

डिफ़ॉल्ट आईडी (पीके) द्वारा अनुक्रमित किया गया है और मैंने उपयोग करके u_id और cl_id के लिए अपनी खुद की अनुक्रमणिका बनाई है,

ALTER TABLE activities ADD INDEX(u_id,cl_id);

अब मैं एक बनाना चाहता हूँ मल्टी लेवल इंडेक्सिंग cl_id (एफके) या आईडी (पीके) के लिए या दोनों स्तंभों के लिए यदि संभव हो तो। क्वेरी का उपयोग कर बहु-स्तर सूचकांक कैसे बनाएं?

किसी तालिका में अनुक्रमित बहु-स्तर वाला कॉलम कैसे ढूंढें? मैंने इस क्वेरी को आजमाया है लेकिन यह केवल अनुक्रमित कॉलम दिखाता है,

SHOW indexes FROM activities;

क्या मल्टी लेवल इंडेक्स और गैर-क्लस्टर इंडेक्स वे दोनों समान हैं?

उत्तर:

जवाब के लिए 0 № 1

मुझे नहीं पता कि "बहु-स्तर" सूचकांक क्या है। लेकिन "समग्र" इंडेक्स जैसे हैं

INDEX(last_name, first_name)

जो के लिए बहुत उपयोगी है

WHERE last_name = "James"
AND first_name = "Rick"

या और भी

WHERE last_name = "James"
AND first_name LIKE "R%"

MySQL में (विशेष रूप से InnoDB), PRIMARY KEY हमेशा एक अद्वितीय सूचकांक है और यह डेटा के साथ "क्लस्टर" है। यही है, पीके द्वारा एक पंक्ति को देखना बहुत ही कुशल है। संरचना हमेशा बीटी है।

"माध्यमिक कुंजी" भी बीटीआर हैं, लेकिन पत्ती नोड में पीके होता है। तो, क्वेरी को पूरा करने के लिए एक दूसरा लुकअप की आवश्यकता है। (यह भेद शायद ही कभी कुछ भी लायक नहीं है।)

पीके और / या माध्यमिक कुंजी "समग्र" हो सकती है।

घोषित करना FOREIGN KEY यदि कोई पहले से ही उपयुक्त नहीं है तो एक द्वितीयक सूचकांक जोड़ता है (PRIMARY या माध्यमिक) सूचकांक जो एफके में कॉलम के साथ शुरू होता है।

निम्नलिखित अनावश्यक है, और इससे बचा जाना चाहिए:

PRIMARY KEY(id),
INDEX(id)           -- DROP this

अनुक्रमित अनुक्रमिक

आउच! मैंने लगभग दो दशकों में उस पुरातन इंडेक्सिंग विधि के बारे में नहीं सुना है।

प्रश्न "बहु-स्तर" अनुक्रमण की परिभाषा जैसे एक लिंक देता है। इससे भागो! स्कूल बदलें। या कम से कम समझें कि आईएस अब व्यवहार्य नहीं माना जाता है।

MySQL अधिकांश अनुक्रमण के लिए "बीटीआरआई" का उपयोग करता है। इसका दशकों पहले आविष्कार किया गया था, और अनिवार्य रूप से अनुक्रमित अनुक्रमिक को मिटा दिया गया था। और, काफी हद तक, डिस्क पर एक अनुक्रमण तकनीक के रूप में हैशिंग को मिटा दिया है।

MySQL के BTrees कई उदाहरणों को संभाल सकते हैं, जैसा कि मेरे उदाहरण में ऊपर है।