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

अनुक्रमण कैसे काम करता है

इंडेक्सिंग क्या करता है?

अनुक्रमण एक अनियंत्रित तालिका को एक क्रम में लाने का तरीका है जो खोज करते समय क्वेरी की दक्षता को अधिकतम करेगा।

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

उदाहरण के लिए, नीचे दी गई तालिका एक काल्पनिक डेटा स्रोत में एक तालिका का प्रतिनिधित्व करती है, जो पूरी तरह से अव्यवस्थित है।

<वें शैली="पाठ्य-संरेखण:केंद्र">इकाई <वें शैली="पाठ्य-संरेखण:दाएं">इकाई_लागत
company_id
10 12 1.15
12 12 1.05
14 18 1.31
18 18 1.34
11 24 1.15
16 12 1.31
10 12 1.15
12 24 1.3
18 6 1.34
18 12 1.35
14 12 1.95
21 18 1.36
12 12 1.05
20 6 1.31
18 18 1.34
11 24 1.15
14 24 1.05

अगर हम निम्नलिखित क्वेरी चलाते हैं:

SELECT
	company_id,
	units,
	unit_cost
FROM
	index_test
WHERE
	company_id = 18

डेटाबेस को सभी 17 पंक्तियों के माध्यम से तालिका में दिखाई देने के क्रम में, ऊपर से नीचे तक, एक समय में एक खोजना होगा। तो company_id . के सभी संभावित उदाहरणों को खोजने के लिए संख्या 18, डेटाबेस को company_id में 18 की सभी उपस्थितियों के लिए संपूर्ण तालिका को देखना चाहिए कॉलम।

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

आप देख सकते हैं कि यह कैसे हमारे डेटा से भरपूर दुनिया में समस्याग्रस्त हो जाता है। तालिकाओं का आकार बढ़ता है और निष्पादन समय में खोज बढ़ती है।

अनइंडेक्स की गई तालिका को क्वेरी करना, यदि दृश्य रूप से प्रस्तुत किया जाता है, तो यह ऐसा दिखाई देगा:

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

company_id . पर एक इंडेक्स के साथ स्तंभ, तालिका, अनिवार्य रूप से, इस तरह "दिखेंगे":

<वें शैली="पाठ्य-संरेखण:केंद्र">इकाई <वें शैली="पाठ्य-संरेखण:दाएं">इकाई_लागत
company_id
10 12 1.15
10 12 1.15
11 24 1.15
11 24 1.15
12 12 1.05
12 24 1.3
12 12 1.05
14 18 1.31
14 12 1.95
14 24 1.05
16 12 1.31
18 18 1.34
18 6 1.34
18 12 1.35
18 18 1.34
20 6 1.31
21 18 1.36

अब, डेटाबेस company_id . को खोज सकता है संख्या 18 और उस पंक्ति के लिए सभी अनुरोधित कॉलम लौटाएं और फिर अगली पंक्ति पर जाएं। अगर अगली पंक्ति का comapny_id . है संख्या भी 18 है तो यह क्वेरी में अनुरोधित सभी कॉलम वापस कर देगा। अगर अगली पंक्ति का company_id . है 20 है, क्वेरी खोजना बंद करना जानती है और क्वेरी समाप्त हो जाएगी।

इंडेक्सिंग कैसे काम करता है?

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

जब सूचकांक किसी विशिष्ट कॉलम पर डेटा संरचना बनाता है तो यह ध्यान रखना महत्वपूर्ण है कि डेटा संरचना में कोई अन्य कॉलम संग्रहीत नहीं है। ऊपर दी गई तालिका के लिए हमारी डेटा संरचना में केवल company_id होगा संख्याएं। इकाइयाँ और unit_cost डेटा संरचना में नहीं रखा जाएगा।

डेटाबेस को यह कैसे पता चलता है कि तालिका में कौन-सी अन्य फ़ील्ड वापस आनी हैं?

डेटाबेस इंडेक्स पॉइंटर्स को भी स्टोर करेंगे जो मेमोरी में अतिरिक्त जानकारी के स्थान के लिए केवल संदर्भ जानकारी हैं। मूल रूप से सूचकांक में company_id होता है और मेमोरी डिस्क पर उस विशेष पंक्ति का घर का पता। सूचकांक वास्तव में इस तरह दिखेगा:

<वें शैली="पाठ्य-संरेखण:केंद्र">सूचक
company_id
10 _123
10 _129
11 _127
11 _138
12 _124
12 _130
12 _135
14 _125
14 _131
14 _133
16 _128
18 _126
18 _131
18 _132
18 _137
20 _136
21 _134

उस अनुक्रमणिका के साथ, क्वेरी company_id . में केवल पंक्तियों की खोज कर सकती है कॉलम जिसमें 18 है और फिर पॉइंटर का उपयोग करके उस विशिष्ट पंक्ति को खोजने के लिए तालिका में जा सकते हैं जहां वह सूचक रहता है। फिर क्वेरी शर्तों को पूरा करने वाली पंक्तियों के लिए अनुरोध किए गए कॉलम के लिए फ़ील्ड पुनर्प्राप्त करने के लिए तालिका में जा सकती है।

यदि खोज को दृष्टिगत रूप से प्रस्तुत किया जाता है, तो यह ऐसा दिखाई देगा:

रिकैप करें

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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ईटीएल बनाम ईएलटी:हम मानते हैं, आप जज

  2. जब DISTINCT <> GROUP BY

  3. प्रदर्शन पर संपीड़न और इसके प्रभाव

  4. एसक्यूएल अलग का चयन करें

  5. पीडीओ डेटाबेस कनेक्शन के साथ आसान सीआरयूडी ऑपरेशन