Mengapakah pertanyaan jauh lebih perlahan apabila dilaksanakan dalam kod berbanding dalam SSMS?
Walaupun mempunyai pertanyaan dan persekitaran pelaksanaan yang sama, pertanyaan mungkin mempamerkan perbezaan masa yang ketara apabila dijalankan dalam kod berbanding dengan SQL Server Management Studio (SSMS). Soalan ini menyelidiki punca asas percanggahan ini.
Menyiasat Isu
Perbandingan kod yang disediakan mendedahkan percanggahan dalam jenis data parameter @clientID antara Kod C# dan skrip SSMS. Dalam C#, kaedah AddWithValue menambah parameter sebagai NVARCHAR, manakala dalam SSMS, parameter diisytiharkan sebagai VARCHAR.
Data Type Precedence and SARG-ability
Disebabkan oleh peraturan keutamaan jenis data, ungkapan Where client_id = @clientID menjadi tidak dapat diSARG (Cari Argumen) apabila @clientID adalah jenis NVARCHAR, dengan anggapan lajur client_id adalah jenis VARCHAR. Ini memaksa pengoptimum pertanyaan melakukan imbasan jadual yang mahal.
Penyelesaian
Untuk menyelesaikan percanggahan ini, sama ada:
SqlParameter clientIDParam = new SqlParameter("@clientID", SqlDbType.Varchar, 200); clientIDParam.Value = ClientID; ada.SelectCommand.Parameters.Add(clientIDParam);
Where client_id = cast(@clientID as varchar(200))
Menentukan jenis data secara eksplisit membantu mencegah potensi isu pencemaran cache.
Lagi Pertimbangan
Dengan memahami kehalusan jenis data ini dan melaksanakan penyelesaian yang disyorkan, anda boleh menyelesaikan percanggahan prestasi pertanyaan antara kod dan SSMS.
Atas ialah kandungan terperinci Mengapa Pertanyaan SQL Saya Jauh Lebih Lambat dalam Kod Daripada SSMS?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!