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

कॉलम के गैर-नियतात्मक कार्य के प्रदर्शन में सुधार कैसे करें जहां खंड या शामिल हों?

गैर-नियतात्मक कार्य के अलावा, मुझे जो समस्या दिखाई दे रही है वह यह है कि आप किसी क्षेत्र पर गणना करते हैं। यह (आमतौर पर) क्वेरी द्वारा फ़ील्ड पर किसी भी इंडेक्स को अनुपयोगी बनाता है।

इस लिंक का दूसरा पैराग्राफ़ (दस सामान्य SQL प्रोग्रामिंग गलतियाँ (विधेय में अनुक्रमित स्तंभों पर कार्य) ) इस बारे में अधिक विस्तृत जानकारी प्रदान करता है कि ऐसा कब होता है, इससे कैसे बचा जाए और कैसे कभी-कभी ऑप्टिमाइज़र फ़ंक्शन के उपयोग के बावजूद इंडेक्स का उपयोग कर सकते हैं।

संक्षेप में, बेहतर अनुकूलक पर भरोसा करने के बजाय, अक्सर फ़ील्ड को अक्षुण्ण रखकर (उस पर कोई गणना किए बिना) क्वेरी को बदलना संभव होता है, लेकिन इसके बजाय अन्य मानों के लिए (उलट) गणना करना। आपके मामले में GetDate() . द्वारा प्रदान की गई वर्तमान तिथि तक . फिर क्वेरी फ़ील्ड की अनुक्रमणिका का उपयोग कर सकती है table1.Date

तो, आप कुछ इस तरह उपयोग कर सकते हैं:

SELECT COUNT(*) 
FROM table1
WHERE table1.Date
      BETWEEN
             /* First Day of Current Month */
          AND 
             /* Last Day of Current Month */

और आपको केवल उन कार्यों को खोजने की आवश्यकता है जो आपको चालू माह का पहला और अंतिम दिन प्रदान करते हैं।

यह ब्लॉग पोस्ट आपकी मदद कर सकता है:sql-server-query-to-find-first-and-last-day-of-current-month/

इससे भी बेहतर, यह स्टैक ओवरफ्लो प्रश्न/उत्तर:सरलतम-तरीका-से-बनाने-एक-तारीख-वह-द-द-द-द-द-द-द-द-द-महीना दिया गया -एक और तारीख

मुझे परीक्षण करना होगा लेकिन मुझे लगता है कि उपरोक्त की यह मामूली भिन्नता काम करेगी:

SELECT COUNT(*) 
FROM table1
WHERE table1.Date 
      >=      /* First Day of Current Month */
        DATEADD(mm, DATEDIFF(mm, 0, GetDate() ), 0) 
  AND table1.Date 
      <       /* First Day of Next Month */
        DATEADD(mm, 1 + DATEDIFF(mm, 0, GetDate() ), 0) 


  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. क्रॉस जॉइन 'एन' बार एक टेबल

  3. SQL सर्वर में DATALENGTH () क्या है?

  4. सी # में SQL सर्वर आउटपुट चर पुनर्प्राप्त करना

  5. एक एसक्यूएल फ़ंक्शन के भीतर एक आईएन क्लॉज में एक वैरिएबल पास करना?