सवाल डेटाबेस इंडेक्स क्या है? [डुप्लिकेट]


इस प्रश्न का उत्तर यहां दिया गया है:

मैंने उनसे बात की है क्योंकि मैंने लगभग 18 महीने पहले तकनीक में काम करना शुरू कर दिया था। मुझे पता है कि वे संभावित रूप से प्रदर्शन में सुधार करते हैं, और वे कॉलम विशिष्ट दिखते हैं - ("हम date_of_birth कॉलम पर उपयोगकर्ता तालिका को इंडेक्स करते हैं")।

बस वे वास्तव में क्या हैं, उनके लिए क्या उपयोग किया जाता है, और वे कैसे काम करते हैं, इसके त्वरित अवलोकन की तलाश में हैं।


50
2018-03-05 19:25


मूल




जवाब:


मैंने इसके बारे में एक पूरी किताब लिखी! यह वेब पर मुफ्त में भी उपलब्ध है: http://use-the-index-luke.com/

मैं जल्द ही आपके सवालों का जवाब देने का प्रयास करता हूं- जो बिल्कुल ठीक नहीं है। आखिरी बार मैंने कोशिश की, मैं एक किताब लिखना समाप्त कर दिया ...

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

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

आप एक ही टेबल पर लेकिन विभिन्न कॉलम पर कई अनुक्रमणिका हो सकते हैं। तो, एक सूचकांक पर last_name,first_name एक सूचकांक से अलग है first_name केवल (जिसे आपको पहले नाम से खोज अनुकूलित करने की आवश्यकता होगी)।

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

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

बेहतर विचार पाने के लिए, मेरी पुस्तक की सामग्री की पूरी तालिका देखें: http://use-the-index-luke.com/sql/table-of-contents


72
2018-03-06 09:42



आपने यह उल्लेख करने के लिए पूरी तरह से उपेक्षित किया कि कभी-कभी इंडेक्स का प्रदर्शन प्रदर्शन के लिए नहीं किया जाता है बल्कि कई स्तंभों में विशिष्टता को लागू करने के लिए किया जाता है। - horseyguy


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

एक और अधिक विस्तृत स्पष्टीकरण पाया जा सकता है यहां इस विकिपीडिया लेख में


11
2018-03-05 19:29





एक डेटाबेस इंडेक्स एक डेटास्ट्रक्चर है जिसका उद्देश्य लुकअप ऑपरेशन की समय जटिलता में सुधार करना है।

कोई सूचकांक के साथ लुकअप सबसे खराब मामले में है O(N) जटिलता। इंडेक्स के साथ कुशल लुकअप लॉगरिदमिक सक्षम बनाता है O(log(N)) या यहां तक ​​कि कुछ आर्किटेक्चर के साथ भी O(1) जटिलता।

एक डेटाबेस इंडेक्स भी डीबी बाधाओं को लागू करना संभव बनाता है। कई डीबी सिस्टमों ने कॉलम के एक सेट पर एक इंडेक्स सेट किया है जिसे संदर्भित किया गया है PRIMARY KEY। कुछ डीबी सिस्टमों में कॉलम की आवश्यकता होती है FOREIGN KEY अनुक्रमित करने के लिए, ताकि संचालन को तेज करने के लिए (सम्मिलित करें, अपडेट करें)।


10
2018-05-20 16:24



गैर-मामूली लुकअप कभी सच नहीं हो सकता ओ (1)। सबसे अच्छा यह सिर्फ एक ओ (लॉग (एन)) प्रक्रिया को "हेवीवेट ओ (1) प्रक्रिया के तहत" कुछ "तक सीमित करता है। - Hot Licks
ओ (1) अनुक्रमित क्षेत्र के साथ समानता (WHERE) क्वेरी के मामले में हैश इंडेक्स के साथ प्राप्त किया गया है, अनुक्रमित फ़ील्ड, क्या यह सही लगता है? - octoback
हालांकि: postrgresql दस्तावेज़ से: हैश इंडेक्स ऑपरेशंस वर्तमान में WAL-log नहीं हैं, इसलिए डेटाबेस क्रैश के बाद हैश इंडेक्स को REINDEX के साथ पुनर्निर्मित करने की आवश्यकता हो सकती है। उन्हें स्ट्रीमिंग या फ़ाइल-आधारित प्रतिकृति पर भी दोहराया नहीं जाता है। इन कारणों से, हैश इंडेक्स उपयोग वर्तमान में निराश है। - octoback
आखिर में एक हैश ओ (लॉग (एन)) है, क्योंकि स्टोरेज ओ है (लॉग (एन))। यह ठीक है अगर आप स्टोरेज आकार को ठीक करते हैं तो यह ओ (1) जैसा दिखता है। - Hot Licks


एक अनुक्रमणिका एक वैकल्पिक संरचना है, जो किसी तालिका या तालिका क्लस्टर से जुड़ी होती है, जो कभी-कभी डेटा पहुंच को गति दे सकती है। किसी तालिका के एक या अधिक स्तंभों पर एक अनुक्रमणिका बनाकर, आप कुछ मामलों में तालिका से यादृच्छिक रूप से वितरित पंक्तियों का एक छोटा सेट पुनर्प्राप्त करने की क्षमता प्राप्त करते हैं। इंडेक्स डिस्क I / O को कम करने के कई साधनों में से एक हैं।

यदि एक ढेर-संगठित तालिका में कोई अनुक्रमणिका नहीं है, तो डेटाबेस को मान खोजने के लिए एक पूर्ण तालिका स्कैन करना होगा। उदाहरण के लिए, किसी इंडेक्स के बिना, hr.departments तालिका में स्थान 2700 की क्वेरी के लिए डेटाबेस को इस मान के लिए प्रत्येक तालिका ब्लॉक में प्रत्येक पंक्ति को खोजने की आवश्यकता होती है। डेटा दृष्टिकोण में वृद्धि के रूप में यह दृष्टिकोण अच्छी तरह से स्केल नहीं करता है।

http://docs.oracle.com/cd/E11882_01/server.112/e10713/indexiot.htm


6
2018-03-05 19:28





यह एक बहुत ही समान धागा चल रहा है यहाँ। जांचें, यह सहायक है।

मुझे पता है कि वे संभावित रूप से प्रदर्शन में सुधार करते हैं

हाँ यह सच हे। लेकिन, कृपया इसे ध्यान में रखें, कभी-कभी इंडेक्सिंग का कारण भी हो सकता है घटिया प्रदर्शन भी। उदाहरण: एक डेटाबेस के सभी कॉलम इंडेक्स निस्संदेह प्रदर्शन को प्रभावित करेगा।


5
2018-03-05 19:35