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


440

एसक्यूएल में एक सूचकांक क्या है ? क्या आप स्पष्ट रूप से समझने के लिए समझा सकते हैं या संदर्भ दे सकते हैं?

मुझे एक सूचकांक का उपयोग कहां करना चाहिए?

जवाबों:


377

डेटाबेस में खोज को गति देने के लिए एक इंडेक्स का उपयोग किया जाता है। MySQL के विषय पर कुछ अच्छे दस्तावेज हैं (जो अन्य SQL सर्वरों के लिए भी प्रासंगिक है): http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html

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

इंडेक्स एक UNIQUEइंडेक्स भी हो सकता है , जिसका अर्थ है कि आपके पास उस कॉलम में डुप्लिकेट मान नहीं हो सकते हैं, या PRIMARY KEYजो कुछ स्टोरेज इंजन में परिभाषित करते हैं, जहां डेटाबेस फ़ाइल में मान संग्रहीत होता है।

MySQL में आप EXPLAINअपने SELECTस्टेटमेंट के सामने यह देखने के लिए उपयोग कर सकते हैं कि आपकी क्वेरी किसी इंडेक्स का उपयोग करेगी या नहीं। प्रदर्शन की समस्याओं के निवारण के लिए यह एक अच्छी शुरुआत है। यहां पढ़ें: http://dev.mysql.com/doc/refman/5.0/en/explain.html


"सूचकांक भी एक अद्वितीय सूचकांक हो सकता है ..." बस आपके साथ पुष्टि करने के लिए, क्या इसका मतलब यह है कि सूचकांक गैर-अद्वितीय हो सकता है? मैंने हमेशा इसका UNIQUE सोचा। मैं SQL में काफी नया हूँ, मुझे क्षमा करें
Daniel Kurniadi

@DanielKurniadi अधिकांश सूचकांक अद्वितीय नहीं हैं। मेरे पास एक उपयोगकर्ता डेटाबेस हो सकता है और वह सभी के लिए क्वेरी कर सकता है जो गोथेनबर्ग में रहता है। "शहर" फ़ील्ड पर एक सूचकांक मेरी क्वेरी को गति देगा। लेकिन गोथेनबर्ग में 1 से अधिक उपयोगकर्ता रहते हैं, इसलिए सूचकांक को गैर-अद्वितीय होना चाहिए।
एमिल विक्रोत्तम

174

एक गुच्छेदार सूचकांक एक फोन बुक की सामग्री की तरह है। आप 'हिल्डिच, डेविड' में किताब खोल सकते हैं और एक दूसरे के बगल में 'हिल्डिच के सभी के लिए सभी जानकारी पा सकते हैं। यहाँ संकुल अनुक्रमणिका के लिए कुंजियाँ हैं (lastname, firstname)।

यह श्रेणीबद्ध प्रश्नों के आधार पर बहुत सारे डेटा को पुनः प्राप्त करने के लिए संकुल अनुक्रमित को महान बनाता है क्योंकि सभी डेटा एक दूसरे के बगल में स्थित होते हैं।

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

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

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

यदि आपके पास (शहर) पर एक गैर-संकुल सूचकांक है, तो इन प्रश्नों को अधिक तेज़ी से निष्पादित किया जा सकता है।

उम्मीद है की वो मदद करदे!


151

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

यहां अधिक


2
मैं "उपमा" का उपयोग करके चीजों की व्याख्या करने वाले अनुभवी लोगों की प्रशंसा करता हूं। +1
एसएन

82

एक सूचकांक का उपयोग प्रश्नों के प्रदर्शन को तेज करने के लिए किया जाता है। यह उन डेटाबेस डेटा पेजों की संख्या को कम करके करता है जिन्हें विज़िट / स्कैन करना है।

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


49

इंडेक्स सभी जल्दी से डेटा खोजने के बारे में हैं

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

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

इंडेक्स बेसिक्स
क्लस्टर्ड और नॉन-क्लस्टर्ड इंडेक्स
यूनिक और नॉन-यूनिक इंडेक्स इंडेक्स के
फायदे और नुकसान


सभी उत्तरों को पढ़कर मुझे आश्चर्य हुआ कि सब कुछ सूचकांक क्यों नहीं। नुकसान वाले लिंक को शामिल करने के लिए +1।
लक्षय गर्ग

@LakshayGarg कभी-कभी अनावश्यक अनुक्रमण भी क्वेरी के निष्पादन समय को धीमा कर सकता है, इसलिए हमें सब कुछ अनुक्रमित नहीं करना चाहिए। जैसे हर चीज के अपने नियम और विपक्ष होते हैं।
गौरव राजदेव

@ लाक्षागृह गौरव राजदेव सही हैं। बहुत समान रखें: आप प्रत्येक अध्याय या आकृति या तालिका को एक पुस्तक में अनुक्रमित करना चाहते हैं, लेकिन प्रत्येक अनुच्छेद, वाक्य या शब्द को नहीं। आम तौर पर, यह एक ओवरकिल होगा और अनावश्यक जटिलता को जन्म देगा। आशा है कि यह इस उत्तर में खींची गई तस्वीर के काफी करीब है।
बृहस्पतिवार

23

सामान्य सूचकांक में अच्छी तरह से एक है B-tree। अनुक्रमणिका दो प्रकार की होती हैं: गुच्छेदार और अधपकी।

क्लस्टर किए गए सूचकांक पंक्तियों का एक भौतिक क्रम बनाता है (यह केवल एक हो सकता है और ज्यादातर मामलों में यह एक प्राथमिक कुंजी भी है - यदि आप टेबल पर प्राथमिक कुंजी बनाते हैं तो आप इस तालिका पर भी क्लस्टर इंडेक्स बनाते हैं)।

गैर- अनुक्रमित सूचकांक भी एक द्विआधारी पेड़ है लेकिन यह पंक्तियों का भौतिक क्रम नहीं बनाता है। तो गैर-अनुक्रमित सूचकांक के पत्ती नोड्स में पीके (यदि यह मौजूद है) या पंक्ति सूचकांक शामिल हैं।

इंडेक्स का उपयोग खोज की गति बढ़ाने के लिए किया जाता है। क्योंकि जटिलता ओ (लॉग एन) की है। सूचकांक बहुत बड़ा और दिलचस्प विषय है। मैं कह सकता हूं कि बड़े डेटाबेस पर इंडेक्स बनाना कभी-कभी किसी तरह की कला है।


6
सामान्य तौर पर, बाइनरी ट्री के बजाय इसका बी-ट्री।
मिच गेहूं

इसलिए, क्योंकि अनुक्रमित स्वयं-संतुलन वाले पेड़ों का उपयोग करते हैं, हर बार जब आप एक पंक्ति जोड़ते / हटाते हैं तो यह खुद को संतुलित करेगा - सम्मिलित करना / हटाना अधिक महंगा ... सही?
डेविड रिफ़ेइली

20

INDEXES - आसानी से डेटा खोजने के लिए

UNIQUE INDEX - डुप्लिकेट मानों की अनुमति नहीं है

के लिए सिंटैक्स INDEX

CREATE INDEX INDEX_NAME ON TABLE_NAME(COLUMN);

के लिए सिंटैक्स UNIQUE INDEX

CREATE UNIQUE INDEX INDEX_NAME ON TABLE_NAME(COLUMN);

13

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

अनुक्रमण के बिना तो मान लीजिए कि क्वेरी को 50 खोजना है, तो उसे 49 रिकॉर्ड्स को लीनियर सर्च के रूप में पढ़ना होगा।

निम्न छवि देखें। (यह चित्र इस वीडियो से लिया गया है )

यहां छवि विवरण दर्ज करें

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


12

INDEX एक प्रदर्शन अनुकूलन तकनीक है जो डेटा पुनर्प्राप्ति प्रक्रिया को गति देती है। यह एक सतत डेटा संरचना है जो उस तालिका से डेटा प्राप्त करने के दौरान प्रदर्शन को बढ़ाने के लिए एक तालिका (या दृश्य) से जुड़ी होती है (या देखें)।

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

आपको Sql-Indexes की सटीक जानकारी स्पष्ट और विश्वसनीय तरीके से मिलेगी: इन लिंक का पालन करें:

  1. Cocnept- वार समझ के लिए: http://dotnetauthorities.blogspot.in/2013/12/Microsoft-SQL-Server-Training-Online-Learning-Classes-INDEX-Overview-and-Optimifications.html
  2. कार्यान्वयन-वार समझ के लिए: http://dotnetauthorities.blogspot.in/2013/12/Microsoft-SQL-Server-Training-Online-Learning-Classes-INDEX-Creation-Deletetion-Optimifications.html

6

एक सूचकांक का उपयोग कई अलग-अलग कारणों से किया जाता है। मुख्य कारण क्वेरी को गति देना है ताकि आप पंक्तियों को प्राप्त कर सकें या पंक्तियों को तेजी से सॉर्ट कर सकें। एक अन्य कारण एक प्राथमिक-कुंजी या अद्वितीय सूचकांक को परिभाषित करना है जो यह गारंटी देगा कि किसी अन्य कॉलम में समान मान नहीं हैं।


6

यदि आप SQL सर्वर का उपयोग कर रहे हैं, तो सबसे अच्छा संसाधनों में से एक इसकी अपनी पुस्तकें ऑनलाइन है जो इंस्टॉल के साथ आती है! यह 1 जगह है जो मैं किसी भी SQL सर्वर से संबंधित विषयों के लिए संदर्भित करूंगा।

यदि यह व्यावहारिक है "मुझे यह कैसे करना चाहिए?" इस तरह के सवाल, तो StackOverflow पूछने के लिए एक बेहतर जगह होगी।

इसके अलावा, मैं थोड़ी देर के लिए वापस नहीं आया, लेकिन sqlservercentral.com वहाँ से बाहर शीर्ष SQL सर्वर संबंधित साइटों में से एक हुआ करता था।


0

एक सूचकांक एक है on-disk structure associated with a table or view that speeds retrieval of rows from the table or view। एक इंडेक्स में तालिका या दृश्य में एक या अधिक स्तंभों से निर्मित कुंजियाँ होती हैं। इन कुंजियों को एक संरचना (बी-ट्री) में संग्रहीत किया जाता है जो एसक्यूएल सर्वर को प्रमुख मूल्यों से जुड़ी पंक्ति या पंक्तियों को जल्दी और कुशलता से खोजने में सक्षम बनाता है।

Indexes are automatically created when PRIMARY KEY and UNIQUE constraints are defined on table columns. For example, when you create a table with a UNIQUE constraint, Database Engine automatically creates a nonclustered index.

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

कृपया इंडेक्स (क्लस्टर और नॉन क्लस्टर) के बारे में अधिक जानकारी के लिए इसे देखें: https://docs.microsoft.com/en-us/sql/relational-dat डेटाबेस/indexes/clustered-and-nonclustered-indexes-described?view= एसक्यूएल सर्वर-ver15

उम्मीद है की यह मदद करेगा!

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.