Trước tiên, hãy đảm bảo rằng bạn đang lập hồ sơ hiệu suất đúng cách. Ví dụ:chạy truy vấn hai lần từ ADO.NET và xem liệu lần thứ hai có nhanh hơn nhiều lần so với lần đầu tiên hay không. Điều này loại bỏ chi phí chờ đợi ứng dụng biên dịch và cơ sở hạ tầng gỡ lỗi tăng lên.
Tiếp theo, kiểm tra cài đặt mặc định trong ADO.NET và SSMS. Ví dụ:nếu bạn chạy SET ARITHABORT OFF trong SSMS, bạn có thể thấy rằng nó hiện chạy chậm như khi sử dụng ADO.NET.
Những gì tôi đã tìm thấy một lần là việc ĐẶT LƯU TRỮ TẮT trong SSMS khiến quy trình được lưu trữ được biên dịch lại và / hoặc sử dụng các số liệu thống kê khác nhau. Và đột nhiên cả SSMS và ADO.NET đều báo cáo thời gian thực thi gần như giống nhau.
Để kiểm tra điều này, hãy xem kế hoạch thực thi cho mỗi lần chạy, cụ thể là bảng syscacheobjects. Chúng có thể sẽ khác nhau.
Chạy 'sp_recompile' trên một thủ tục được lưu trữ cụ thể sẽ loại bỏ kế hoạch thực thi liên quan khỏi bộ đệm, sau đó cho SQL Server cơ hội để tạo một kế hoạch có thể thích hợp hơn ở lần thực thi tiếp theo của thủ tục.
Cuối cùng, bạn có thể thử cách tiếp cận "nuke it from obitan" để làm sạch toàn bộ bộ đệm thủ tục và bộ đệm bộ nhớ bằng SSMS:
DBCC DROPCLEANBUFFERS
DBCC FREEPROCCACHE
Làm như vậy trước khi bạn kiểm tra truy vấn của mình sẽ ngăn việc sử dụng các kế hoạch thực thi được lưu trong bộ nhớ cache và bộ nhớ cache của kết quả trước đó.