Câu hỏi này không phải là quá nhiều về việc tìm kiếm giải pháp về việc nhận được giải thích cho hành vi bizarrest bizarrest mà tôi từng thấy từ SQL Server.Hiệu suất quy trình được lưu trữ - đây là WILD?
Tôi đã có một thủ tục lưu trữ với các chữ ký sau:
alter procedure MySP @param1 uniqueidentifier,
@param2 uniqueidentifier,
@param3 uniqueidentifier
Cho một tập hợp một số thông số, proc này đã tham gia một thời gian rất dài để chạy từ C# (sử dụng SqlCommand.ExecuteReader()
) - khoảng 2 phút. Sử dụng cùng các tham số trong phiên truy vấn trực tiếp, SP chạy trong dưới 2 giây.
Phải mất một thời gian dài, và tôi thậm chí sẽ không cố gắng giải thích cách chúng tôi stumbled khi giải pháp này, nhưng đây là những gì chúng tôi đã làm:
Vào đầu SP, chúng tôi tuyên bố 3 biến địa phương và gán chúng với các giá trị của các thông số, như vậy:
declare @param1_copy uniqueidentifier,
@param2_copy uniqueidentifier,
@param3_copy uniqueidentifier
select @param1_copy = @param1,
@param2_copy = @param2,
@param3_copy = @param3
Và sau đó, trong phần còn lại của SP chúng tôi thay thế tất cả các tham chiếu đến các thông số đầu vào với các bản sao địa phương.
Thì đấy. SP được thực hiện dưới 2 giây. Và đội bóng ở đây là gobsmacked.
Bây giờ, thưa quý vị, mọi người có thể giải thích hành vi này không?
Tuyệt vời. Chúng tôi vấp phải giải pháp sách giáo khoa mà không nhận ra! –