एक सूचकांक क्या है?
MySQL में अनुक्रमित एक संगठित अनुक्रमिक तरीके से डेटा को सॉर्ट करता है। वे स्तंभ (ओं) पर बनाए जाते हैं जिनका उपयोग डेटा को फ़िल्टर करने के लिए किया जाएगा। सूचकांक को वर्णानुक्रम में क्रमबद्ध सूची के रूप में सोचें। उन नामों को देखना आसान है जिन्हें वर्णानुक्रम में क्रमबद्ध किया गया है, जो क्रमबद्ध नहीं हैं।
अक्सर अद्यतन की जाने वाली तालिकाओं पर एक सूचकांक का उपयोग करने से खराब प्रदर्शन हो सकता है। ऐसा इसलिए होता है क्योंकि MySQL हर बार एक नया इंडेक्स ब्लॉक बनाता है, जिसमें डेटा टेबल में जोड़ा या अपडेट किया जाता है। आम तौर पर, अनुक्रमणिका का उपयोग उन तालिकाओं पर किया जाना चाहिए जिनका डेटा बार-बार नहीं बदलता है, लेकिन चुनिंदा खोज क्वेरी में बहुत अधिक उपयोग किया जाता है।
क्या एक सूचकांक का उपयोग करें?
धीमी प्रणाली को कोई भी पसंद नहीं करता है। लगभग सभी डेटाबेस सिस्टम में उच्च सिस्टम प्रदर्शन का प्रमुख महत्व है। अधिकांश व्यवसाय हार्डवेयर में भारी निवेश करते हैं ताकि डेटा पुनर्प्राप्ति और जोड़तोड़ तेजी से हो सके। लेकिन हार्डवेयर निवेश की एक सीमा है जिसे व्यवसाय कर सकता है। अपने डेटाबेस का अनुकूलन एक सस्ता और बेहतर उपाय है।
प्रतिक्रिया समय में सुस्ती आमतौर पर डेटाबेस तालिकाओं में बेतरतीब ढंग से संग्रहीत होने के कारण होती है। खोज क्वेरी में वांछित डेटा का पता लगाने के लिए एक के बाद एक पूरे बेतरतीब ढंग से संग्रहीत रिकॉर्ड के माध्यम से लूप करना है। यह खराब प्रदर्शन डेटाबेस में परिणाम देता है जब बड़ी तालिकाओं से डेटा पुनर्प्राप्त करने की बात आती है। इसलिए, अनुक्रमित का उपयोग उस डेटा को खोजने में आसान बनाने के लिए किया जाता है।
सिंटेक्स: इंडेक्स बनाएं
इंडेक्स को 2 तरीकों से परिभाषित किया जा सकता है
- टेबल निर्माण के समय
- तालिका बनाने के बाद
हमारे myflixdb के लिए हम पूर्ण नाम पर डेटाबेस में बहुत सारी खोजों की उम्मीद करते हैं।
हम एक नई तालिका "members_indexed" में अनुक्रमणिका में "full_names" कॉलम जोड़ेंगे।
नीचे दी गई स्क्रिप्ट हमें वह हासिल करने में मदद करती है।
CREATE TABLE `members_indexed` (`membership_number` int(11) NOT NULL AUTO_INCREMENT,`full_names` varchar(150) DEFAULT NULL,`gender` varchar(6) DEFAULT NULL,`date_of_birth` date DEFAULT NULL,`physical_address` varchar(255) DEFAULT NULL,`postal_address` varchar(255) DEFAULT NULL,`contact_number` varchar(75) DEFAULT NULL,`email` varchar(255) DEFAULT NULL,PRIMARY KEY (`membership_number`),INDEX(full_names)) ENGINE=InnoDB;
"Myflixdb" के खिलाफ MySQL कार्यक्षेत्र में उपरोक्त एसक्यूएल स्क्रिप्ट निष्पादित करें।
Myflixdb को रीफ़्रेश करने से, सदस्यों द्वारा बनाई गई नाम की नई तालिका प्रदर्शित होती है।
"नोट" सदस्यों के लिए इंडेक्स नोड में "full_names" टेबल है।
जैसे-जैसे सदस्य आधार का विस्तार होता जाता है और रिकॉर्ड की संख्या बढ़ती जाती है, वैसे सदस्य और परिधि द्वारा WH सदस्य और ORDER BY का उपयोग करने वाले टेबल पर खोज क्वेरीज़ बहुत तेजी से घटती हैं, जबकि सूचकांक को परिभाषित किए बिना सदस्य तालिका का प्रदर्शन करते हैं।
इंडेक्स बेसिक सिंटैक्स जोड़ें
डेटाबेस तालिका को परिभाषित करते समय उपरोक्त उदाहरण ने सूचकांक बनाया। मान लीजिए हमारे पास पहले से ही एक टेबल परिभाषित है और उस पर खोज क्वेरी बहुत धीमी है। परिणाम लौटाने में उन्हें बहुत समय लगता है। समस्या की जांच करने के बाद, हमें पता चलता है कि हम WHERE क्लॉज में सबसे अधिक इस्तेमाल किए जाने वाले कॉलम में INDEX बनाकर सिस्टम के प्रदर्शन में बहुत सुधार कर सकते हैं।
अनुक्रमणिका को जोड़ने के लिए हम निम्नलिखित क्वेरी का उपयोग कर सकते हैं
CREATE INDEX id_index ON table_name(column_name);
मान लीजिए कि फिल्मों की मेज पर खोज क्वेरी बहुत धीमी है और हम प्रश्नों को गति देने के लिए "मूवी शीर्षक" पर एक सूचकांक का उपयोग करना चाहते हैं, हम इसे प्राप्त करने के लिए निम्न स्क्रिप्ट का उपयोग कर सकते हैं।
CREATE INDEX `title_index` ON `movies`(`title`);
उपरोक्त क्वेरी को निष्पादित करने से फिल्मों की तालिका में शीर्षक क्षेत्र पर एक सूचकांक बनता है।
इसका मतलब यह है कि "शीर्षक" का उपयोग करने वाली फिल्मों की मेज पर सभी खोज क्वेरी तेजी से होंगी।
फिल्मों की तालिका में अन्य फ़ील्ड पर खोज क्वेरीज़ अभी भी अनुक्रमित फ़ील्ड के आधार पर की तुलना में धीमी हैं।
नोट: यदि आप अपने डेटाबेस खोज इंजन के लिए उपयोग करने का इरादा रखते हैं, तो फ़ील्ड के आधार पर यदि आवश्यक हो तो आप कई कॉलमों पर अनुक्रमित बना सकते हैं।
यदि आप किसी विशेष तालिका पर परिभाषित अनुक्रमित देखना चाहते हैं, तो आप ऐसा करने के लिए निम्न स्क्रिप्ट का उपयोग कर सकते हैं।
SHOW INDEXES FROM table_name;
आइए अब एक नज़र डालते हैं myflixdb में मूवी टेबल पर परिभाषित सभी इंडेक्स पर।
SHOW INDEXES FROM `movies`;
MySQL कार्यक्षेत्र में उपरोक्त स्क्रिप्ट को Myflixdb के खिलाफ निष्पादित करने से हमें बनाए गए सूचकांक पर परिणाम मिलते हैं।
नोट: मेज पर प्राथमिक और विदेशी कुंजी पहले से ही MySQL द्वारा अनुक्रमित की गई हैं। प्रत्येक इंडेक्स का अपना विशिष्ट नाम होता है और जिस स्तंभ पर इसे परिभाषित किया जाता है उसे भी दिखाया जाता है।
सिंटेक्स: ड्रॉप इंडेक्स
ड्रॉप कमांड का उपयोग टेबल पर पहले से ही परिभाषित अनुक्रमों को हटाने के लिए किया जाता है।
ऐसे समय हो सकते हैं जब आपने पहले से ही किसी तालिका पर एक सूचकांक निर्धारित किया हो जो अक्सर अद्यतन किया जाता है। आप UPDATE और INSERT प्रश्नों के प्रदर्शन को बेहतर बनाने के लिए इस तरह की तालिका पर अनुक्रमणिका को हटाना चाह सकते हैं। एक टेबल पर एक इंडेक्स छोड़ने के लिए उपयोग किया जाने वाला मूल सिंटैक्स निम्नानुसार है।
DROP INDEX `index_id` ON `table_name`;
आइए अब एक व्यावहारिक उदाहरण देखें।
DROP INDEX ` full_names` ON `members_indexed`;
उपर्युक्त आदेश को निष्पादित करने से सदस्यों के लिए सूचकांक `full_names` के साथ सूचकांक गिर जाता है।
सारांश
- जब MySQL खोज प्रश्नों के प्रदर्शन में सुधार करने की बात आती है तो सूचकांक बहुत शक्तिशाली होते हैं।
- तालिका बनाते समय या बाद में जोड़े जाने के बाद अनुक्रमित को परिभाषित किया जा सकता है।
- आप एक तालिका पर एक से अधिक स्तंभों पर अनुक्रमित को परिभाषित कर सकते हैं।
- तालिका से परिभाषित इंडेक्स प्रदर्शित करने के लिए SHOW INDEX FROM table_name का उपयोग किया जाता है।
- DROP कमांड का उपयोग किसी दिए गए टेबल पर एक परिभाषित सूचकांक को हटाने के लिए किया जाता है।