Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Panggilan database .NET lambat saat menggunakan COM Interop, cepat melalui penganalisis kueri

Periksa jenis parameter (@SSN) yang Anda berikan ke SQL. Lebih sering daripada tidak, parameter ditambahkan seperti ini:

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

Sayangnya pola ini menambahkan @SSN parameter sebagai NVARCHAR ketik (mis. Unicode). Aturan SQL Server Prioritas Jenis Data memerlukan perbandingan antara NVARCHAR dan VARCHAR untuk dilakukan sebagai NVARCHAR, sehingga kueri dijalankan seolah-olah SQL berikut diminta:

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

Kueri ini tidak dapat mengambil manfaat dari indeks pada kolom SSN sehingga pemindaian tabel dilakukan sebagai gantinya. 90% dari waktu saya menyelidiki klaim 'kueri berjalan lambat dari aplikasi tetapi cepat dari SSMS' adalah masalah ini, karena sebagian besar pengembang sebenarnya menjalankan berbeda kueri di SSMS untuk dibandingkan (mereka menggunakan argumen VARCHAR atau nilai kode keras).

Jika memang ini masalahnya, solusinya sepele:tentukan jenis parameter secara eksplisit sebagai 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. apa masalahnya dengan AttachDbFilename?

  2. Membagi Partisi menjadi Dua di SQL Server (T-SQL)

  3. Apa itu Basis Data, Mengapa Basis Data?

  4. SQL Server IF vs IIF():Apa Bedanya?

  5. Bagaimana OBJECTPROPERTY() Bekerja di SQL Server