2010-04-08 12 views

उत्तर

18

इंडेक्स चयन क्वेरी को तेज करते हैं क्योंकि इंडेक्स परिभाषा द्वारा क्रमबद्ध होते हैं। इसके अतिरिक्त एक अद्वितीय सूचकांक उस बाधा को लागू करता है कि उस कॉलम का मूल्य (या बाध्य कॉलम के मानों का संयोजन) केवल एक बार मौजूद होता है (जो प्राथमिक पर लागू होता है, लेकिन प्राथमिक केवल एक तालिका के बाद एक तालिका में एक बार मौजूद हो सकता है)।

इंडेक्स एक ट्रेडऑफ हैं: वे चयन क्वेरी को तेज करते हैं (जब कॉलम का इंडेक्स होता है) लेकिन वे बनाते हैं कि MySQL तालिका अधिक जगह का उपभोग करती है और तालिका को INSERT/UPDATE/DELETE के माध्यम से बदलते समय अधिक समय लगता है।

+15

उपरोक्त पोस्ट में जोड़कर, इंडेक्स एक पुस्तक की अनुक्रमणिका की तरह हैं। कल्पना कीजिए कि आपके पास एक रेसिपी बुक थी, और आप यह पता लगाना चाहते थे कि ओमेलेट कैसे बनाना है, आप बस पीछे की तरफ जाना चाहते हैं, शब्द और उसका पेज नंबर ढूंढें, और उस पेज नंबर पर जाएं। अब कल्पना करें कि आपके पास कोई अनुक्रमणिका नहीं थी और उसे व्यंजनों के 400 पृष्ठों के माध्यम से खोजना पड़ा, क्या एक दुःस्वप्न! – studioromeo

+0

वास्तव में यह कहने के लिए @Rob बधाई हो रही है कि एक सूचकांक laymans शर्तों में क्या है। – CResults

+1

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

0

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

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

दो अलग-अलग प्रकार के इंडेक्स भी हैं। क्लस्टर और गैर क्लस्टर इंडेक्स। अगर मुझे गलत नहीं लगता है, तो MySQL प्राथमिक कुंजी क्लस्टर में हैं और अन्य सभी अनुक्रमणिका गैर क्लस्टर हैं। अंतर के बारे में एक अच्छा परिचय लेख here है। इसमें SQL सर्वर शामिल है, लेकिन अवधारणा एक जैसी होनी चाहिए।

मैंने MySQL के साथ बहुत कुछ नहीं किया है, लेकिन मैं ऑनलाइन देख सकता हूं, FULLTEXT एक प्राकृतिक भाषा पूर्ण पाठ खोज का उपयोग करके खोजने का एक तरीका प्रदान करता है। असल में, क्वेरी में, आप पूर्ण पाठ अनुक्रमित कॉलम (ओं) को खोजने के लिए शर्तें प्रदान करेंगे और यह सभी परिणामों को वापस खींच देगा। यहां दिए गए कुछ लेख दिए गए हैं जो आपको उपयोगी लग सकते हैं।
MySQL Docs on Full Text Search
Article 1
Article 2

5

इंडेक्स दो बातों के लिए उपयोग किया जाता है:

  1. एक क्षेत्र (या क्षेत्रों) है जो विशिष्ट एक पंक्ति (प्राथमिक कुंजी) पहचान करता हो।
  2. अक्सर इस्तेमाल किए गए फ़ील्ड पर लुकअप के दौरान समय बचाएं। उदाहरण के लिए, यदि आप अक्सर अपने उपयोगकर्ता नाम से उपयोगकर्ताओं को देखते हैं तो आपको उपयोगकर्ता नाम कॉलम पर एक अनुक्रमणिका जोड़नी चाहिए।

यहां http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html इंडेक्स के बारे में और अधिक पढ़ें या बेहतर डेटाबेस डिज़ाइन पर उचित पुस्तकें खरीदें।

अपने दूसरे प्रश्न के बारे में, इस http://dev.mysql.com/doc/refman/5.0/en/string-type-overview.html पर एक नज़र डालें।

मुख्य अंतर यह है कि टेक्स्ट तालिका स्थान के बाहर संग्रहीत किया जाता है और तालिका से संदर्भित किया जाता है, जबकि VARCHAR को सामान्य क्षेत्र के रूप में संग्रहीत किया जाता है। इस मामले में प्रदर्शन पूरी तरह से आपके उपयोग पैटर्न पर निर्भर करता है। टेक्स्ट पूर्ण पाठ खोज की अनुमति भी दे सकता है।

इसके अलावा, आप ऊपर बताए गए कारणों के लिए टेक्स्ट पर एक अनुक्रमणिका का उपयोग नहीं कर सकते हैं, इसलिए इसे लुकअप फ़ील्ड के रूप में उपयोग करना एक अच्छा विचार नहीं है।

0

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

1

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

उन मामलों में TEXT का उपयोग जहां आपको इसकी आवश्यकता नहीं है। कुछ क्षेत्रों के लिए उपयोगकर्ताओं को सीमित करना बेहतर है i.e. शीर्षक और url, क्योंकि आपके पास url पर एक अनुक्रमणिका है। और मुझे नहीं लगता कि आप TEXT प्रकार वाले कॉलम पर इंडेक्स का उपयोग कर सकते हैं। मुझे यूआरएल पर FULLTEXT -index नहीं लगता है कि आप क्या चाहते हैं।

मैं आपको एक प्रारंभिक पाठ या वेबसाइट में डेटाबेस के बारे में पढ़ने की सलाह दूंगा।

0

यदि आप जानते हैं कि हर किसी के पास एक अद्वितीय सामाजिक सुरक्षा संख्या (एसएसएन) है, तो आप एसएसएन द्वारा आदेश दिया गया हर किसी के नाम का एक सूचकांक बना सकते हैं। फिर, अगर आपको किसी के एसएसएन दिया गया था, तो यह उनके नाम को खोजने में वास्तव में जल्दी होगा।

अब मान लें कि आपके पास प्रत्येक व्यक्ति के लिए एक मनीला फ़ोल्डर है। कार्ड में विस्तृत चिकित्सा रिकॉर्ड आदि हो सकते हैं। आपका डेटाबेस इन कार्डों को क्रम में नहीं रख सकता है - शायद यह कॉम्पैक्टस के अंत में नए फ़ोल्डरों को जोड़ता है। लेकिन यह एक क्रमबद्ध "इंडेक्स" रखता है ताकि यदि आप एक एसएसएन देखते हैं, तो यह आपको बता सकता है कि प्रासंगिक फ़ोल्डर कहाँ रखा गया है।

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

16

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

इंडेक्स कई प्रकार के प्राथमिक कुंजी, सूचकांक, अद्वितीय, फुलटेक्स्ट

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

इंडेक्स को आपकी माध्यमिक प्राथमिक कुंजी माना जाता है, आप इन क्षेत्रों को उन क्षेत्रों पर रखते हैं जिन्हें आप जल्दी से खोजना चाहते हैं।

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

अंत में फुलटेक्स्ट केवल एक विशेष इंडेक्स है जो MySQL के MyISAM स्टोरेज इंजन द्वारा उपयोग किया जाता है, इसका उपयोग मानव वाक्यांशों का उपयोग करके आपके रिकॉर्ड खोजने के लिए किया जाता है। बहुत अधिक जानकारी के बिना अपने mysqls अपने खोज इंजन, LIKE sql कमांड का एक और उन्नत संस्करण।

उदाहरण के लिए यदि मैंने 'अंडे और मक्खन' की खोज की है, तो पूर्ण टेक्स्ट अंडे, मक्खन या दोनों के रिकॉर्ड की खोज करेगा।जहां LIKE केवल 'अंडे और मक्खन' युक्त तारों की खोज करेगा

मुझे उम्मीद है कि यह मदद करता है, mysql site इस विषय पर बहुत अधिक जानकारी है, लेकिन इससे आपको सामान्य जानकारी मिलती है।

हैप्पी कोडिंग :)

संबंधित मुद्दे