Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

MySQL प्रदर्शन:MySQL/MariaDB अनुक्रमणिका

एक MySQL/MariaDB डेटाबेस में डेटा तालिकाओं में संग्रहीत किया जाता है। इंडेक्स के बारे में सोचने का एक आसान तरीका एक व्यापक स्प्रेडशीट की कल्पना करना है। इस प्रकार की प्रणाली हमेशा त्वरित खोज के लिए अनुकूल नहीं होती है; यहीं पर एक सूचकांक आवश्यक हो जाता है। यदि कोई अनुक्रमणिका नहीं है, तो डेटाबेस इंजन को पंक्ति एक से शुरू करना होगा और संबंधित मानों की तलाश में सभी पंक्तियों के माध्यम से ब्राउज़ करना होगा। यदि यह एक छोटी सी तालिका है, तो यह कोई बड़ी बात नहीं है, लेकिन बड़ी तालिकाओं और अनुप्रयोगों में जहां लाखों और यहां तक ​​कि अरबों पंक्तियों वाली तालिकाएं हो सकती हैं, यह समस्याग्रस्त हो जाता है। जैसा कि आप कल्पना कर सकते हैं, उन पंक्तियों को एक-एक करके खोजना नवीनतम हार्डवेयर पर भी समय लेने वाला होगा। इसका समाधान आपके डेटा के लिए एक INDEX (या एक से अधिक) बनाना है।

इंडेक्स क्या है?

एक इंडेक्स एक संगठित लुकअप टेबल है जिसमें पॉइंटर्स होते हैं जहां डेटाबेस में डेटा पुनर्प्राप्त किया जा सकता है। यह अवधारणा पुस्तक अनुक्रमणिका के समान है। एक किताब में, इंडेक्स उन पेज नंबरों को सूचीबद्ध करता है जहां विभिन्न विषय स्थित होते हैं। डेटाबेस में, इंडेक्स पॉइंटर्स को स्टोर करता है जो तार्किक और क्रमबद्ध क्रम में होते हैं, जिससे डेटाबेस में तेजी से लुकअप की अनुमति मिलती है। बिना इंडेक्स वाली किताब की कल्पना करें। यदि आप किसी विशिष्ट विषय पर जानकारी देखना चाहते हैं, तो आपको शुरुआत से शुरू करना होगा और पृष्ठों को तब तक पलटना होगा जब तक कि आपको वह जानकारी न मिल जाए जिसकी आप तलाश कर रहे हैं। एक पुस्तक अनुक्रमणिका आपको यह बताकर हल करती है कि आप जिस जानकारी की तलाश कर रहे हैं वह कौन से पृष्ठ हैं। यह अनिवार्य रूप से एक MySQL अनुक्रमणिका कैसे काम करती है।

MySQL इंडेक्स का उपयोग कब करता है?

जब भी डेटाबेस सर्वर को जानकारी देखनी होती है, तो यह प्रक्रिया को गति देने के लिए एक इंडेक्स का उपयोग करेगा। इसके उदाहरणों में शामिल हैं WHERE, JOIN ON, MIN/MAX, और ORDER BY/GROUP BY क्लॉज। यदि आपकी क्वेरीज़ इनमें से किसी भी स्थिति में अक्सर किसी कॉलम को खोजने या उसका मिलान करने जा रही हैं, तो आपको एक इंडेक्स बनाने पर विचार करना चाहिए।

क्या इंडेक्स डेटाबेस के प्रदर्शन में सुधार करते हैं?

अधिकांश समय, संक्षिप्त उत्तर हां है। डेटा के माध्यम से पढ़ने और खोजने के लिए, अनुक्रमित प्रदर्शन को पूरी तरह से बढ़ाते हैं। पूर्ण तालिका स्कैन नहीं करने से लगभग किसी भी SELECT क्वेरी में सुधार होगा। यह एक छोटी सी कीमत पर आता है। अक्सर हेरफेर किए जाने वाले स्तंभों के लिए, प्रत्येक परिवर्तन के लिए एक लागत होती है। यह डेटाबेस पर INSERTs और UPDATEs को रोक सकता है।

सामान्य MySQL अनुक्रमणिका प्रकार

MySQL इंडेक्स के तीन सामान्य प्रकार हैं:

  • प्राथमिक कुंजी
  • सूचकांक
  • अद्वितीय

प्राथमिक कुंजी

एक प्राथमिक कुंजी डेटाबेस सर्वर को बताती है जो तालिका में सबसे महत्वपूर्ण कॉलम है। आमतौर पर, इसका उपयोग auto_increment id कॉलम के लिए किया जाता है। उदाहरण के लिए, यदि आपके पास कर्मचारी जानकारी वाली तालिका है, तो आप "EMPLOYEE_ID" कॉलम पर एक प्राथमिक कुंजी चाहते हैं। अन्य तालिकाओं में, यानी, वेतन तालिका, आप कर्मचारी के सभी डेटा के बजाय केवल EMPLOYEE_ID का उल्लेख करेंगे।

इंडेक्स

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

अद्वितीय

एक अद्वितीय सूचकांक इस मायने में थोड़ा अलग है कि यह तालिका में क्या लिखा जा सकता है, इस पर विशिष्ट प्रतिबंध लगाता है। यदि आप एक पंक्ति सम्मिलित करने का प्रयास करते हैं जिसमें एक मान है जो पहले से ही डेटा में शामिल है, तो INSERT एक त्रुटि उत्पन्न करेगा। यह त्वरित खोजों के साथ-साथ कुछ डेटा अखंडता की अनुमति देता है।

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

कॉलम पर इंडेक्स बनाने के कई तरीके हैं। जब आप TABLE बनाते हैं, या बाद में ALTER TABLE या CREATE INDEX स्टेटमेंट के साथ एक इंडेक्स सेट कर सकते हैं।

प्राथमिक कुंजी अनुक्रमणिका बनाना

प्राथमिक कुंजी अनुक्रमणिका बनाने का सबसे आसान तरीका यह है कि आप तालिका बनाते समय इसे करें। हम इस ट्यूटोरियल के लिए एक कर्मचारी तालिका के उदाहरण का उपयोग करेंगे। तालिका में तीन कॉलम होंगे:ID, FIRSTNAME, और LASTNAME। रचना कुछ इस तरह दिख सकती है:

CREATE TABLE EMPLOYEE
(
  ID INT,
  FIRSTNAME CHAR(32),
  LASTNAME CHAR(32)
);

यह कथन बिना अनुक्रमणिका के तालिका बनाएगा। हम इस तरह के एक बयान के साथ प्राथमिक कुंजी जोड़ सकते हैं:

ALTER TABLE EMPLOYEE
  ADD CONSTRAINT PRIMARY KEY (ID);

यह MySQL को बताता है कि हमारे पास कॉलम आईडी पर एक प्राथमिक कुंजी है।

ऐसा करने का एक और सरल तरीका तालिका के निर्माण के दौरान है। शुरू से, हम तालिका को फिर से बनाएंगे और एक कथन में प्राथमिक कुंजी जोड़ेंगे।

CREATE TABLE EMPLOYEE
(
  ID INT,
  FIRSTNAME CHAR(32),
  LASTNAME CHAR(32),
  PRIMARY KEY (ID)
);

यह एकल कथन उपरोक्त पहले दो कथनों के समान कार्य करता है। एक प्राथमिक कुंजी में एक से अधिक कॉलम हो सकते हैं, लेकिन सभी कॉलम अद्वितीय होने चाहिए। प्राथमिक कुंजी का उपयोग तालिका में किसी एक पंक्ति की पहचान करने के लिए किया जा सकता है।

इंडेक्स बनाएं का उपयोग करके एक इंडेक्स बनाना

ऊपर दी गई उदाहरण तालिका का उपयोग करते हुए, कल्पना करें कि कंपनी में हजारों कर्मचारी हैं, और आप कर्मचारियों को अंतिम नाम से जल्दी से खोजने में सक्षम होना चाहते हैं। प्राथमिक कुंजी के साथ, केवल एक प्रविष्टि हो सकती है। आपके पास एक ही कर्मचारी आईडी वाले एक से अधिक लोग नहीं हो सकते हैं। अंतिम नामों के साथ, कई लोगों का उस नाम को साझा करना काफी आम है। फिर, ऐसा करने के कुछ तरीके हैं। ऊपर दी गई तालिका का उपयोग करना:

CREATE TABLE EMPLOYEE
(
  ID INT,
  FIRSTNAME CHAR(32),
  LASTNAME CHAR(32),
  PRIMARY KEY (ID)
);

हम LASTNAME कॉलम में इस तरह एक इंडेक्स जोड़ सकते हैं:

CREATE INDEX idx1 ON EMPLOYEE (LASTNAME);

इस टेबल पर LASTNAME द्वारा की जाने वाली खोजें अब तेज होंगी। इस उदाहरण में, "idx1" अनुक्रमणिका का नाम है। इससे भविष्य में जरूरत पड़ने पर इंडेक्स को खुद ही रेफर करना आसान हो जाएगा।

तालिका में अनुक्रमणिका जोड़ने का दूसरा तरीका ALTER TABLE कमांड है। वही काम पूरा करने के लिए जो हमने पिछले स्टेटमेंट के साथ किया था, हम निम्नलिखित कमांड चलाएंगे:

ALTER TABLE EMPLOYEE ADD INDEX idx1 (LASTNAME);

एक अनुक्रमणिका जोड़ने का अंतिम तरीका जो कुछ समय बचाएगा वह तालिका बनाएं के दौरान करना है। यदि आप पहले से जानते हैं कि आप किसी विशिष्ट कॉलम पर खोज करने या उसमें शामिल होने जा रहे हैं तो आप पहले से मौजूद इंडेक्स के साथ प्रारंभिक तालिका बना सकते हैं:

CREATE TABLE EMPLOYEE
(
  ID INT,
  FIRSTNAME CHAR(32),
  LASTNAME CHAR(32),
  PRIMARY KEY (ID),
  INDEX idx1 (LASTNAME)
);

ये तीनों कथन एक ही परिणाम उत्पन्न करते हैं।

बहु-स्तंभ अनुक्रमणिका

एक इंडेक्स को केवल एक कॉलम पर ही नहीं होना चाहिए। अगर हम FIRSTNAME और LASTNAME दोनों पर तेजी से लुकअप चाहते हैं, तो हम दोनों कॉलम पर एक इंडेक्स बना सकते हैं। तालिका बनाने में यह इस तरह दिखेगा:

CREATE TABLE EMPLOYEE
(
  ID INT,
  FIRSTNAME CHAR(32),
  LASTNAME CHAR(32),
  PRIMARY KEY (ID),
  INDEX idx2 (LASTNAME,FIRSTNAME)
);

CREATE INDEX कमांड का उपयोग करना:

CREATE INDEX idx2 ON EMPLOYEE (LASTNAME, FIRSTNAME);

और अंत में, ALTER TABLE कमांड:

ALTER TABLE EMPLOYEE ADD INDEX idx2 (LASTNAME, FIRSTNAME);

एक अद्वितीय अनुक्रमणिका बनाना

कई बार ऐसा भी हो सकता है कि आप किसी कॉलम पर एक इंडेक्स बनाना चाहें और उस कॉलम की सभी एंट्रीज को यूनिक होने के लिए बाध्य कर दें। यदि हमने अपनी उदाहरण तालिका को एक कार्यालय कॉलम (यह दर्शाता है कि उनके भवन में कौन सा कार्यालय है) को शामिल करने के लिए बढ़ाया है, तो हम इसे एक अद्वितीय सूचकांक बनाना चाह सकते हैं। आइए इस तालिका के साथ काम करें:

CREATE TABLE EMPLOYEE
(
  ID INT,
  FIRSTNAME CHAR(32),
  LASTNAME CHAR(32),
  OFFICE INT,
  PRIMARY KEY (ID)
);

ध्यान दें कि अब हमारे पास तालिका में एक पूर्णांक संग्रहीत है जो यह दर्शाता है कि व्यक्ति किस कार्यालय में रहता है। यह एक अन्य तालिका, "कार्यालयों" को संदर्भित कर सकता है, जिसमें भवन के विभिन्न कार्यालयों के बारे में जानकारी होगी।

इस पर एक इंडेक्स बनाने के लिए, हम निम्नलिखित कमांड जारी करेंगे:

CREATE UNIQUE INDEX idx3 ON EMPLOYEE (OFFICE);

आप इन्हें क्रिएट टेबल और ऑल्टर टेबल कमांड में बनाने के लिए समान कमांड का उपयोग कर सकते हैं। अब अगर आपने इन दो इंसर्ट को चलाने की कोशिश की:

INSERT INTO EMPLOYEE (ID, FIRSTNAME, LASTNAME, OFFICE) VALUES (1, 'JANE', 'JOHNSON', 1);

INSERT INTO EMPLOYEE (ID, FIRSTNAME, LASTNAME, OFFICE) VALUES (2, 'JOHN', 'SMITH', 1);

आपको दूसरी INSERT पर एक त्रुटि प्राप्त होगी:

Duplicate entry '1' for key 'idx3'

एक अनुक्रमणिका निकालना

एक समय ऐसा भी आ सकता है जब आप किसी स्तंभ पर अनुक्रमणिका नहीं चाहते। शायद आपने महसूस किया है कि आप अक्सर एक कॉलम नहीं खोजते हैं, और इंडेक्स इंसर्ट और अपडेट को धीमा कर रहा है। ऐसा करने के लिए, हम DROP INDEX कमांड का उपयोग करेंगे। हमारी तालिका इस तरह बनाई गई थी:

CREATE TABLE EMPLOYEE
(
  ID INT,
  FIRSTNAME CHAR,
  LASTNAME CHAR,
  PRIMARY KEY (ID),
  INDEX idx (LASTNAME,FIRSTNAME)
);

अगर हम LASTNAME और FIRSTNAME कॉलम पर इंडेक्स को हटाना चाहते हैं, तो हम यह कमांड जारी करेंगे:

DROP INDEX IDX ON EMPLOYEE;

निष्कर्ष

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

MySQL और MariaDB डेटाबेस कई अन्य खोजों और पढ़ने के विकल्पों की पेशकश करते हैं, जिनमें कई ऐसे भी शामिल हैं जिन्हें यहां कवर नहीं किया गया था। यहां मुख्य बातों में शामिल हैं: 

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

इसे क्रिया में देखें!

समर्पित सर्वरों की हमारी विस्तृत श्रृंखला सबसे बड़े निगमों के लिए उच्च उपलब्धता, क्लस्टर सर्वर सेटअप तक बढ़ते व्यवसायों के लिए सबसे छोटे डेटाबेस को होस्ट करने के लिए आवश्यक शक्ति, स्थिरता और सुरक्षा प्रदान करती है। देखना चाहते हैं कि आपकी आवश्यकताओं को पूरा करने के लिए हम कौन से समाधान पेश कर सकते हैं?

आज आप इस तकनीक का लाभ कैसे उठा सकते हैं, यह जानने के लिए हमारे किसी जानकार समाधान या अनुभवी होस्टिंग सलाहकार से बात करने के लिए हमें 800.580.4985 पर कॉल करें, या हमारे साथ चैट या टिकट खोलें!

<फ़ील्डसेट>श्रृंखला नेविगेशन<<पिछला लेखअगला लेख>>

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL त्रुटि 150

  2. MySQL में एक कॉलम का नाम बदलने में त्रुटि

  3. पीएचपी पीडीओ और MySQLi

  4. Android के लिए JDBC बनाम वेब सेवा

  5. वर्डप्रेस ब्लॉग चलाने के लिए PHP-MySQL लगातार कनेक्शन का उपयोग करना