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

SQL सर्वर अनुक्रमणिका:प्रमुख आवश्यकताएं, प्रदर्शन प्रभाव और विचार

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

सभी महान प्रश्न, लेकिन इससे पहले कि हम गोता लगाएँ, यह जानना आवश्यक है कि पहली जगह में अनुक्रमणिका की आवश्यकता क्यों हो सकती है।

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

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

रूट नोड –> इंटरमीडिएट नोड –> लीफ़ नोड.

क्वेरी इंजन मध्यवर्ती स्तर में संदर्भ पृष्ठ की तलाश करता है। इस उदाहरण में, पहले मध्यवर्ती नोड में 1-500 से बुक आईडी होते हैं और दूसरे मध्यवर्ती नोड में 501-1000 होते हैं।

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

SQL सर्वर प्रदर्शन पर अनुक्रमणिका के प्रभाव

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

मान लीजिए कि हमें [SalesOrderDetail_Demo] तालिका से [SalesOrderID] 56958 के लिए डेटा की आवश्यकता है।

चुनें *
से [AdventureWorks].[Sales].[SalesOrderDetail_Demo]
जहां SalesOrderID=56958

इस तालिका में कोई अनुक्रमणिका नहीं है। बिना किसी अनुक्रमणिका वाली तालिका को SQL सर्वर में हीप तालिका कहा जाता है।

यहां से, आप उपरोक्त चयन कथन को चलाना और वास्तविक निष्पादन योजना देखना चाहेंगे। इस तालिका में 121317 अभिलेख हैं। यह एक टेबल स्कैन करता है, जिसका अर्थ है कि यह विशिष्ट [SalesOrderID] खोजने के लिए तालिका में सभी पंक्तियों को पढ़ता है।

जब आप टेबल स्कैन आइकन पर अपना कर्सर घुमाते हैं, तो यह दर्शाता है कि वास्तविक परिणाम सेट में 2 पंक्तियाँ हैं, लेकिन इस उद्देश्य के लिए, यह उस तालिका की सभी पंक्तियों को पढ़ता है।

  • पढ़ने वाली पंक्तियों की संख्या:121317
  • निष्पादन के लिए पंक्तियों की वास्तविक संख्या:2

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

अब, उपरोक्त चयन कथन को अनुक्रमणिका वाली तालिका के साथ चलाते हैं। इस तालिका में [ProductID] और [rowguid] कॉलम पर प्राथमिक कुंजी क्लस्टर इंडेक्स और दो गैर-क्लस्टर इंडेक्स हैं। हम SQL सर्वर में विभिन्न प्रकार के इंडेक्स के बारे में बाद में बात करेंगे।

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

क्लस्टर्ड इंडेक्स में विवरण की तलाश है, यह क्वेरी ऑप्टिमाइज़र को आउटपुट में दी गई पंक्तियों को सटीक रूप से पढ़ता है।

आपको एक तुलनात्मक विश्लेषण प्रदान करने के लिए, SQL सर्वर इंडेक्स के साथ और उसके बिना निष्पादन योजना की तुलना करें। अधिक जानकारी के लिए आप SQL सर्वर 2016 लेख में SQL झोंपड़ी की क्वेरी निष्पादन योजनाओं की तुलना कैसे करें देख सकते हैं।

इस उदाहरण के लिए, संकुल अनुक्रमणिका खोज और तालिका स्कैन में हाइलाइट किए गए मानों को देखें:

  • लॉजिकल रीड:SQL सर्वर डेटाबेस इंजन बफर कैश से एक पेज को पढ़ता है और यह एक लॉजिकल रीड का कारण बनता है। नीचे, हम देखते हैं कि आपके द्वारा अनुक्रमणिका बनाने के बाद तार्किक पठन 1715 से घटाकर 3 कर दिया गया है।
  • अनुमानित CPU लागत भी 0.133527 से घटकर 0.00016 हो जाती है
  • अनुमानित IO लागत 1.27283 से घटकर 0.003125
  • . हो गई है

नीचे दी गई छवि तालिका स्कैन और अनुक्रमणिका खोज के बीच अंतर दिखाती है।

SQL सर्वर में अच्छी (उपयोगी) अनुक्रमणिका और खराब अनुक्रमणिका

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

SQL सर्वर अनुक्रमणिका प्रकार और विचार

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

हमारे पास SQL ​​सर्वर में अन्य इंडेक्स भी हो सकते हैं जैसे XML इंडेक्स, कॉलम स्टोर इंडेक्स, स्थानिक इंडेक्स, फुल-टेक्स्ट इंडेक्स, हैश इंडेक्स, आदि।

SQL सर्वर में अनुक्रमणिका बनाने से पहले आपको निम्नलिखित बातों पर विचार करना चाहिए:

  • कार्यभार
  • वह स्तंभ जिस पर अनुक्रमणिका आवश्यक है
  • टेबल का आकार
  • स्तंभ डेटा का आरोही या अवरोही क्रम
  • स्तंभ क्रम
  • सूचकांक प्रकार
  • फ़ैक्टर, पैड इंडेक्स और TempDB सॉर्ट ऑर्डर भरें

SQL सर्वर अनुक्रमणिका लाभ, निहितार्थ और अनुशंसाएं

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. मुझे sql सर्वर में टेबल वैरिएबल बनाम अस्थायी टेबल का उपयोग कब करना चाहिए?

  2. SQL सर्वर - SQL सर्वर / T-SQL ट्यूटोरियल भाग 38 में GUI का उपयोग करके कॉलम कैसे बदलें या स्क्रिप्ट बदलें

  3. SQL कन्वर्ट दिनांक फ़ंक्शन का उपयोग करने के विभिन्न तरीके

  4. SQL सर्वर प्रतिकृति समस्या निवारण

  5. SQL सर्वर में राउंड (UP/DOWN) कैसे करें – 5 उपयोगी टिप्स