Rumah >pangkalan data >tutorial mysql >Mengapa Pertanyaan SQL saya Pantas dalam SSMS tetapi Lambat dalam Aplikasi C# saya?

Mengapa Pertanyaan SQL saya Pantas dalam SSMS tetapi Lambat dalam Aplikasi C# saya?

Susan Sarandon
Susan Sarandonasal
2025-01-04 07:04:34156semak imbas

Why is my SQL Query Fast in SSMS but Slow in my C# Application?

Kod Berjalan Lambat dalam Aplikasi tetapi Pantas dalam SSMS

Masalah:

Pertanyaan yang mengembalikan data dengan cepat dalam SQL Server Management Studio (SSMS) mengambil banyak masa apabila dijalankan daripada C# aplikasi.

Kod:

Kod C# menggunakan SqlDataAdapter dan kaedah Isiannya untuk melaksanakan pertanyaan.

using (var conn = new SqlConnection(...))
using (var ada = new SqlDataAdapter(...))
{
    ada.Fill(Logs);
}

Pertanyaan SSMS ialah sama dengan yang dilaksanakan dalam aplikasi.

Punca:

Percanggahan dalam masa pelaksanaan disebabkan oleh perbezaan dalam cara parameter dikendalikan dalam aplikasi dan SSMS. Dalam aplikasi, kaedah AddWithValue digunakan untuk menambah parameter jenis NVARCHAR, manakala dalam SSMS, parameter diisytiharkan sebagai VARCHAR.

Penyelesaian:

Untuk menyelesaikan isu ini, sama ada:

  1. Gunakan pembina yang menerima jenis apabila menambah parameter dalam kod aplikasi:
ada.SelectCommand.Parameters.Add("@clientID", SqlDbType.Varchar, 200);
  1. Hantar parameter dalam teks SQL:
where client_id = cast(@clientID as varchar(200))

Penyelesaian pertama diutamakan kerana ia juga menangani cache yang berpotensi isu pencemaran.

Tambahan Pertimbangan:

  • Pastikan kedua-dua aplikasi dan SSMS menggunakan komputer dan log masuk yang sama.
  • Jadual yang dirujuk dalam pertanyaan mempunyai indeks yang sesuai dan berfungsi dengan baik dalam SSMS .
  • Pertimbangkan kesan caching parameter pada prestasi pertanyaan.

Atas ialah kandungan terperinci Mengapa Pertanyaan SQL saya Pantas dalam SSMS tetapi Lambat dalam Aplikasi C# saya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn