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

COM इंटरऑप का उपयोग करते समय .NET डेटाबेस धीमी गति से कॉल करता है, क्वेरी विश्लेषक के माध्यम से तेज़

पैरामीटर के प्रकार की जाँच करें (@SSN) जिसे आप SQL में पास करते हैं। अक्सर पैरामीटर इस तरह जोड़ा जाता है:

List<...> GetBySSN(string ssn) {
   SqlCommand cmd = new SqlCommand (@"select ... from ... where [email protected]", conn);
   cmd.Parameters.AddWithValue("@SSN", ssn);
   using (SqlDataReader rdr = cmd.ExecuteQuery()) {
     ...
   }
}

दुर्भाग्य से यह पैटर्न @SSN . जोड़ता है पैरामीटर के रूप में NVARCHAR प्रकार (यानी यूनिकोड)। SQL सर्वर के नियम डेटा प्रकार वरीयता NVARCHAR और VARCHAR के बीच तुलना को NVARCHAR के रूप में करने की आवश्यकता होती है, इसलिए क्वेरी को निष्पादित किया जाता है जैसे कि निम्न SQL का अनुरोध किया गया था:

select ... from ... where CAST(SSN as NVARCHAR) = @SSN;

यह क्वेरी SSN कॉलम पर किसी इंडेक्स से लाभ नहीं उठा सकती है, इसलिए इसके बजाय एक टेबल स्कैन किया जाता है। 90% बार मैं इस दावे की जांच करता हूं कि 'क्वेरी ऐप से धीमी लेकिन एसएसएमएस से तेज चलती है' यह समस्या है, क्योंकि अधिकांश डेवलपर्स वास्तव में एक अलग चलाते हैं। तुलना करने के लिए SSMS में क्वेरी (वे VARCHAR तर्क या हार्ड कोडित मान का उपयोग करते हैं)।

यदि यह वास्तव में समस्या है, तो समाधान तुच्छ है:पैरामीटर प्रकार को स्पष्ट रूप से निर्दिष्ट करें SqlDbType.VarChar




  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 सर्वर को Java डेटाबेस से कनेक्ट करना

  3. SQL सर्वर में दिनांक से लघु माह का नाम प्राप्त करने के 5 तरीके

  4. SQL सर्वर में ट्रिगर की सूची लौटाएं

  5. कैसे जांचें कि SQL सर्वर में एक कंप्यूटेड कॉलम "जारी" है या नहीं?