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

Permintaan sangat lambat dalam kode tetapi cepat dalam SSMS

Kode Anda di SSMS bukan kode yang sama dengan yang Anda jalankan di aplikasi Anda. Baris ini di aplikasi Anda menambahkan parameter NVARCHAR:

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

sementara di skrip SSMS Anda mendeklarasikannya sebagai VARCHAR:

declare @clientID varchar(200)

Karena aturan Prioritas Jenis Data Where client_id = @clientID ekspresi dalam kueri Anda tidak dapat di-SARG di mana @clientID bertipe NVARCHAR (Saya membuat lompatan keyakinan dan berasumsi bahwa client_id kolom bertipe VARCHAR). Aplikasi dengan demikian memaksa pemindaian tabel di mana kueri SSMS dapat melakukan pencarian kunci cepat. Ini adalah masalah yang diketahui dan dipahami dengan baik dengan menggunakan Parameters.AddWithValue dan telah dibahas di banyak artikel sebelumnya, misalnya. lihat Bagaimana Kode Akses Data Mempengaruhi Kinerja Basis Data. Setelah masalahnya dipahami, solusinya menjadi sepele:

  • tambahkan parameter dengan konstruktor yang menerima tipe:Parameters.Add("@clientID", SqlDbType.Varchar, 200) (dan lakukan berikan panjang eksplisit untuk mencegah polusi cache, lihat Performa kueri dan rencanakan masalah cache saat panjang parameter tidak ditentukan dengan benar

  • atau berikan parameter dalam teks SQL:where client_id = cast(@clientID as varchar(200)) .

Solusi pertama lebih unggul karena memecahkan masalah polusi cache selain masalah kemampuan SARG.

Saya juga merekomendasikan Anda membaca Lambat di Aplikasi, Cepat di SSMS? Memahami Misteri Performa



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Memperbaiki "Prosedur mengharapkan parameter '@ pernyataan' dari jenis 'ntext/nchar/nvarchar'." Kesalahan dalam SQL Server

  2. Periksa Surat Tidak Terkirim di SQL Server (T-SQL)

  3. Apa itu @@TEXTSIZE di SQL Server?

  4. Apakah kunci utama sudah ketinggalan zaman?

  5. Cara Menemukan Collation di SQL Server (T-SQL)