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

क्या मुझे SQL सर्वर में थोड़ा सा फ़ील्ड इंडेक्स करना चाहिए?

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

जब आप पंक्तियों का एक सेट मांगते हैं, तो SQL तालिका स्कैनिंग (प्रत्येक पंक्ति को देखते हुए) की तुलना में पंक्तियों को अधिक तेज़ी से खोजने के लिए अनुक्रमणिका का उपयोग करता है।

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

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

तो एसक्यूएल वास्तव में क्या कर रहा है काम करने वाले सेट (पंक्तियों की संख्या) को कम करने की कोशिश कर रहा है, इसे फिर से चालू करना है।

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

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



  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. nvarchar(MAX) में अधिकतम कितने वर्ण होंगे?

  3. एंटिटी फ्रेमवर्क के साथ संग्रहित प्रक्रिया से डेटा प्राप्त करना

  4. स्पॉटलाइट क्लाउड अलार्म कस्टमाइज़ करें

  5. वेब से निष्पादित होने पर क्वेरी का समय समाप्त हो जाता है, लेकिन SSMS से निष्पादित होने पर सुपर-फास्ट