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

क्वेरी कोड में बहुत धीमी लेकिन SSMS में तेज़ है

एसएसएमएस में आपका कोड वही कोड नहीं है जिसे आप अपने आवेदन में चलाते हैं। आपके आवेदन में यह पंक्ति एक NVARCHAR पैरामीटर जोड़ती है:

 ada.SelectCommand.Parameters.AddWithValue("@clientID", ClientID);

जबकि SSMS स्क्रिप्ट में आप इसे VARCHAR घोषित करते हैं:

declare @clientID varchar(200)

डेटा प्रकार वरीयता के नियमों के कारण Where client_id = @clientID जहां @clientID . आपकी क्वेरी में अभिव्यक्ति SARG-able नहीं है NVARCHAR प्रकार का है (मैं विश्वास की छलांग लगा रहा हूं और मान लेता हूं कि client_id कॉलम VARCHAR प्रकार का है)। इस प्रकार एप्लिकेशन एक टेबल स्कैन को मजबूर करता है जहां एसएसएमएस क्वेरी त्वरित कुंजी खोज कर सकती है। यह Parameters.AddWithValue का उपयोग करने के साथ एक अच्छी तरह से ज्ञात और समझी जाने वाली समस्या है और इससे पहले कई लेखों में चर्चा की गई है, उदाहरण के लिए। देखें कि डेटा एक्सेस कोड डेटाबेस के प्रदर्शन को कैसे प्रभावित करता है। एक बार जब समस्या समझ में आ जाती है, तो समाधान तुच्छ हो जाते हैं:

  • कंस्ट्रक्टर के साथ पैरामीटर जोड़ें जो एक प्रकार को स्वीकार करता है:Parameters.Add("@clientID", SqlDbType.Varchar, 200) (और करें कैश प्रदूषण को रोकने के लिए स्पष्ट लंबाई में पास करें, क्वेरी प्रदर्शन देखें और कैश समस्याओं की योजना बनाएं जब पैरामीटर लंबाई सही ढंग से निर्दिष्ट न हो

  • या SQL टेक्स्ट में पैरामीटर डालें:where client_id = cast(@clientID as varchar(200))

पहला समाधान बेहतर है क्योंकि यह SARG-क्षमता समस्या के अलावा कैश प्रदूषण की समस्या को भी हल करता है।

मैं आपको एप्लिकेशन में धीमा, SSMS में तेज़ पढ़ने की भी सलाह दूंगा? प्रदर्शन रहस्यों को समझना



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. कैसे ठीक करें "वैकल्पिक तालिका स्विच विवरण विफल" संदेश 4982 (एसक्यूएल सर्वर)

  2. एंटिटी फ्रेमवर्क 6 ट्रांजेक्शन रोलबैक

  3. SQL सर्वर में Msg 529 "डेटा प्रकार int से xml में स्पष्ट रूपांतरण की अनुमति नहीं है" को ठीक करें

  4. SQL सर्वर:Newbies के लिए उपयोगी टिप्स

  5. यदि आप किसी डेटाबेस (जैसे, SQL सर्वर) में लेन-देन नहीं करते हैं तो क्या होता है?