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

पंक्ति निष्पादन द्वारा पंक्ति को SQL में SET आधारित दृष्टिकोण में कैसे परिवर्तित करें

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

  1. जबकि लूप भी एक कर्सर है। इसलिए, लूप को लूप में बदलना चीजों को और तेज करने वाला नहीं है।
  2. LOCAL FAST_FORWARD कर्सर का उपयोग तब तक करें जब तक आपको किसी रिकॉर्ड को वापस ट्रैक करने की आवश्यकता न हो। यह निष्पादन को बहुत तेज कर देगा।
  3. हां, मैं मानता हूं कि ज्यादातर मामलों में एसईटी आधारित दृष्टिकोण सबसे तेज़ होगा, हालांकि अगर आपको कहीं इंटरमीडिएट परिणाम स्टोर करना होगा, तो मैं तालिका चर के बजाय एक अस्थायी तालिका का उपयोग करने का सुझाव दूंगा। इन 2 विकल्पों के बीच अस्थायी तालिका 'कम बुराई' है। यहां कुछ कारण दिए गए हैं कि आपको तालिका चर का उपयोग करने से बचने का प्रयास क्यों करना चाहिए:

    • चूंकि SQL सर्वर के पास निष्पादन योजना पर निर्माण के दौरान तालिका चर पर कोई पूर्व आँकड़े नहीं होंगे, यह हमेशा विचार करेगा कि निष्पादन योजना के निर्माण के दौरान तालिका चर द्वारा केवल एक रिकॉर्ड लौटाया जाएगा। और तदनुसार स्टोरेज इंजन क्वेरी के निष्पादन के लिए केवल उतनी ही रैम मेमोरी प्रदान करेगा। लेकिन वास्तव में, लाखों रिकॉर्ड हो सकते हैं जो तालिका चर निष्पादन के दौरान हो सकते हैं। यदि ऐसा होता है, तो SQL सर्वर को निष्पादन के दौरान डेटा को हार्ड डिस्क पर फैलाने के लिए मजबूर किया जाएगा (और आपको sys.dm_os_wait_stats में बहुत सारे PAGEIOLATCH दिखाई देंगे) जिससे क्वेरीज़ धीमी हो जाएंगी।
    • उपरोक्त समस्या से छुटकारा पाने का एक तरीका प्रत्येक क्वेरी के अंत में स्टेटमेंट लेवल हिंट OPTION (RECOMPILE) प्रदान करना होगा जहां एक टेबल वैल्यू का उपयोग किया जाता है। यह SQL सर्वर को रनटाइम के दौरान हर बार उन प्रश्नों की निष्पादन योजना बनाने के लिए मजबूर करेगा और कम स्मृति आवंटन समस्या से बचा जा सकता है। हालाँकि इसका नकारात्मक पक्ष यह है:SQL सर्वर अब उस संग्रहीत कार्यविधि के लिए पहले से कैश्ड निष्पादन योजना का लाभ नहीं उठा पाएगा, और हर बार पुनर्संकलन की आवश्यकता होगी, जो कुछ हद तक प्रदर्शन को खराब कर देगा। इसलिए, जब तक आप यह नहीं जानते कि अंतर्निहित तालिका में डेटा बार-बार बदलता है या संग्रहीत कार्यविधि को बार-बार निष्पादित नहीं किया जाता है, Microsoft MVPs द्वारा इस दृष्टिकोण की अनुशंसा नहीं की जाती है।


  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. SQL सर्वर (T-SQL) में लॉगिन की डिफ़ॉल्ट भाषा प्राप्त करने के 2 तरीके

  3. पंक्तियों के समूह का चयन करें जो किसी सूची के सभी आइटमों से मेल खाता हो

  4. MSSQL 2008:विशिष्ट फ़ील्ड द्वारा अंतिम अद्यतन रिकॉर्ड प्राप्त करें

  5. स्ट्रिंग वेरिएबल के लिए शून्य या खाली चेक