MySQL इंडेक्स ट्यूटोरियल – बनाएं, जोड़ें और छोड़ें

एक सूचकांक क्या है?

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

बार-बार अपडेट की जाने वाली तालिकाओं पर इंडेक्स का उपयोग करने से खराब प्रदर्शन हो सकता है। ऐसा इसलिए है क्योंकि MySQL हर बार जब टेबल में डेटा जोड़ा या अपडेट किया जाता है तो एक नया इंडेक्स ब्लॉक बनाता है। आम तौर पर, इंडेक्स का उपयोग उन टेबल पर किया जाना चाहिए जिनका डेटा अक्सर नहीं बदलता है लेकिन चुनिंदा खोज क्वेरी में इसका बहुत अधिक उपयोग किया जाता है।

सूचकांक का क्या उपयोग है?

किसी को भी धीमी प्रणाली पसंद नहीं होती। लगभग सभी डेटाबेस सिस्टम में उच्च सिस्टम प्रदर्शन सबसे महत्वपूर्ण है। अधिकांश व्यवसाय हार्डवेयर में भारी निवेश करते हैं ताकि डेटा पुनर्प्राप्ति और हेरफेर तेज़ हो सके। लेकिन हार्डवेयर निवेश की सीमा होती है जो एक व्यवसाय कर सकता है। अपने डेटाबेस को अनुकूलित करना एक सस्ता और बेहतर समाधान है।

MySQL सूची

प्रतिक्रिया समय में धीमापन आमतौर पर डेटाबेस तालिकाओं में बेतरतीब ढंग से संग्रहीत रिकॉर्ड के कारण होता है। वांछित डेटा का पता लगाने के लिए खोज क्वेरी को एक के बाद एक पूरे बेतरतीब ढंग से संग्रहीत रिकॉर्ड के माध्यम से लूप करना पड़ता है। जब बड़ी तालिकाओं से डेटा प्राप्त करने की बात आती है तो इसका परिणाम खराब प्रदर्शन वाले डेटाबेस में होता है। इसलिए, इंडेक्स का उपयोग किया जाता है जो खोज को आसान बनाने के लिए डेटा को सॉर्ट करता है।

वाक्यविन्यास: इंडेक्स बनाएं

इंडेक्स को 2 तरीकों से परिभाषित किया जा सकता है

  1. तालिका निर्माण के समय
  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;

उपरोक्त SQL स्क्रिप्ट को निष्पादित करें MySQL “myflixdb” के खिलाफ कार्यक्षेत्र।

MySQL इंडेक्स बनाएं

Myflixdb को रिफ्रेश करने पर नई बनाई गई तालिका दिखाई देती है जिसका नाम है -members_indexed.

"ध्यान दें" सदस्य_इंडेक्स्ड तालिका में इंडेक्स नोड में “full_names” है।

जैसे-जैसे सदस्य आधार का विस्तार होता है और रिकार्डों की संख्या बढ़ती है, सदस्य_इंडेक्स्ड तालिका पर खोज क्वेरी जो WHERE और 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 कमांड का उपयोग किसी दी गई तालिका पर परिभाषित इंडेक्स को हटाने के लिए किया जाता है।

इस पोस्ट को संक्षेप में इस प्रकार लिखें: