मैं माइक्रोसॉफ्ट एसक्यूएल सर्वर के आंतरिक के बारे में नहीं जानता, लेकिन मैं MySQL के लिए उत्तर दे सकता हूं, जिसे आपने अपने प्रश्न के लिए टैग किया था। अन्य कार्यान्वयन के लिए विवरण भिन्न हो सकते हैं।
Q1. ठीक है, संकुल अनुक्रमणिका के लिए किसी अतिरिक्त स्थान की आवश्यकता नहीं है।
यदि आप संकुल अनुक्रमणिका को छोड़ देते हैं तो क्या होगा? MySQL का InnoDB इंजन क्लस्टर इंडेक्स के रूप में हमेशा प्राथमिक कुंजी (या पहली गैर-शून्य अद्वितीय कुंजी) का उपयोग करता है। यदि आप एक प्राथमिक कुंजी के बिना एक तालिका परिभाषित करते हैं, या आप किसी मौजूदा तालिका की प्राथमिक कुंजी को छोड़ देते हैं, InnoDB संकुल अनुक्रमणिका के लिए एक आंतरिक कृत्रिम कुंजी उत्पन्न करता है . इस आंतरिक कुंजी का संदर्भ देने के लिए कोई तार्किक स्तंभ नहीं है।
Q2. गैर-संकुल अनुक्रमणिका का उपयोग करने वाली क्वेरी द्वारा लौटाए गए पंक्तियों के क्रम की गारंटी नहीं है। व्यवहार में, यह वह क्रम है जिसमें पंक्तियों का उपयोग किया गया था। यदि आपको किसी विशिष्ट क्रम में पंक्तियों को वापस करने की आवश्यकता है, तो आपको ORDER BY
. का उपयोग करना चाहिए आपकी क्वेरी में। यदि ऑप्टिमाइज़र यह अनुमान लगा सकता है कि आपका वांछित क्रम उसी क्रम में है जिसमें वह पंक्तियों तक पहुँच प्राप्त करेगा (इंडेक्स ऑर्डर, चाहे वह क्लस्टर्ड हो या नॉन-क्लस्टर इंडेक्स), तो वह सॉर्टिंग चरण को छोड़ सकता है।
Q3. InnoDB गैर-संकुल सूचकांक में सूचकांक के एक पत्ते पर संबंधित पंक्ति के लिए एक सूचक नहीं होता है, इसका मान होता है प्राथमिक कुंजी का। तो एक गैर-संकुल सूचकांक में एक लुकअप वास्तव में दो बी-पेड़ खोज है, पहली गैर-संकुल अनुक्रमणिका के पत्ते को खोजने के लिए, और फिर क्लस्टर इंडेक्स में दूसरी खोज।
यह एकल बी-ट्री खोज (अधिक या कम) की लागत से दोगुना है, इसलिए InnoDB में एक अतिरिक्त सुविधा है जिसे अनुकूली हैश अनुक्रमणिका . बार-बार खोजे गए मान AHI में कैश हो जाते हैं, और अगली बार जब कोई क्वेरी कैश्ड मान की खोज करती है, तो वह O(1) लुकअप कर सकता है। एएचआई कैश में, यह क्लस्टर इंडेक्स के पत्ते पर सीधे पॉइंटर ढूंढता है, इसलिए यह दोनों को हटा देता है बी-पेड़ खोज, समय का हिस्सा।
यह कुल प्रदर्शन में कितना सुधार करता है यह इस बात पर निर्भर करता है कि आप कितनी बार उसी मान (मानों) की खोज करते हैं जो पहले खोजे जा चुके हैं। मेरे अनुभव में, हैश खोजों बनाम गैर-हैश खोजों का अनुपात लगभग 1:2 होना सामान्य है।
Q4. उन प्रश्नों की सेवा के लिए अनुक्रमणिका का निर्माण करें जिन्हें आपको अनुकूलित करने की आवश्यकता है। आमतौर पर एक संकुल सूचकांक एक प्राथमिक या अद्वितीय कुंजी है, और कम से कम InnoDB के मामले में, यह आवश्यक है। न तो age
न ही salary
अद्वितीय होने की संभावना है।
आपको मेरी प्रस्तुति पसंद आ सकती है, इंडेक्स कैसे डिज़ाइन करें, वास्तव में ।
Q5. जब आप एक अद्वितीय बाधा घोषित करते हैं तो InnoDB स्वचालित रूप से एक अनुक्रमणिका बनाता है। इसके लिए मौजूदा इंडेक्स के बिना आपके पास बाधा नहीं हो सकती है। यदि आपके पास कोई अनुक्रमणिका नहीं है, तो जब आप कोई मान डालते हैं तो इंजन विशिष्टता कैसे सुनिश्चित करेगा? उस कॉलम में डुप्लिकेट मान के लिए पूरी तालिका को खोजना होगा। अनुक्रमणिका अद्वितीय जाँचों को और अधिक कुशल बनाने में मदद करती है।