Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Cơ sở dữ liệu .NET gọi chậm khi sử dụng COM Interop, nhanh qua trình phân tích truy vấn

Kiểm tra loại tham số (@SSN) bạn chuyển cho SQL. Thông số thường xuyên được thêm vào như thế này:

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

Rất tiếc, mẫu này thêm @SSN tham số dưới dạng NVARCHAR loại (tức là. Unicode). Các quy tắc của SQL Server Thứ tự loại dữ liệu yêu cầu so sánh giữa NVARCHAR và VARCHAR được thực hiện dưới dạng NVARCHAR, do đó, truy vấn được thực hiện như thể SQL sau được yêu cầu:

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

Truy vấn này không thể được hưởng lợi từ một chỉ mục trên cột SSN, vì vậy thay vào đó, quá trình quét bảng được thực hiện. 90% số lần tôi điều tra xác nhận quyền sở hữu 'truy vấn chạy chậm từ ứng dụng nhưng nhanh từ SSMS' là vấn đề này, bởi vì phần lớn các nhà phát triển thực sự chạy một khác truy vấn trong SSMS để so sánh với (chúng sử dụng đối số VARCHAR hoặc giá trị được mã hóa cứng).

Nếu đây thực sự là vấn đề, thì giải pháp là nhỏ:chỉ định rõ ràng loại tham số là 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. Hội thảo trên web:Theo dõi tiến trình truy vấn trong SQL Server

  2. SQL chọn tối đa (ngày) và giá trị tương ứng

  3. Thu thập dữ liệu tự động:Tệp cơ sở dữ liệu và ổ đĩa logic trong MS SQL Server

  4. Cách khắc phục “tên hồ sơ không hợp lệ” khi cập nhật hồ sơ thư cơ sở dữ liệu trong SQL Server (T-SQL)

  5. Giới thiệu tính năng Phát lại — Chẩn đoán thời điểm mới cho đám mây Spotlight