Ứng dụng của chúng tôi phát hành truy vấn SQL do NHibernate tạo. Khi chạy ứng dụng, truy vấn mất khoảng 12 giây để chạy với cơ sở dữ liệu SQL Server. SQL Profiler cho thấy hơn 500.000 lần đọc.Cùng một truy vấn SQL chậm hơn từ ứng dụng NHibernate so với SQL Studio?
Tuy nhiên, nếu tôi nắm bắt văn bản truy vấn chính xác bằng cách sử dụng SQL Profiler và chạy lại từ SQL Studio, phải mất 5 giây và hiển thị ít hơn 4.600 lần đọc.
Truy vấn sử dụng một vài tham số có giá trị được cung cấp ở cuối văn bản SQL và tôi đã đọc một chút về các tham số truy vấn và không hiệu quả, nhưng tôi đã nghĩ rằng có liên quan đến các thủ tục được lưu trữ. Có lẽ NHibernate giữ resultset mở trong khi nó instantiates thực thể của nó, mà có thể giải thích thời gian dài hơn, nhưng những gì có thể giải thích thêm 494.000 "lần đọc" cho cùng một truy vấn như được thực hiện bởi NHibernate? (Không có truy vấn bổ sung nào xuất hiện trong theo dõi lược tả SQL.)
Truy vấn được chỉ định làm truy vấn LINQ bằng cách sử dụng cơ sở LINQ NHibernate 3.1. Tôi không bao gồm các truy vấn chính nó bởi vì nó có vẻ như một câu hỏi cơ bản của triết học: những gì có thể giải thích một sự khác biệt đáng kể?
Trong trường hợp nó thích hợp, cũng có một cột varbinary (max) trong kết quả, nhưng trong trường hợp của chúng tôi nó luôn chứa null.
Bất kỳ thông tin chi tiết nào được đánh giá cao!
Parameter đánh hơi cũng áp dụng cho ADHOC truy vấn parameterised không làm thủ tục chỉ lưu trữ. Các kế hoạch cho chúng được biên dịch theo tập tham số đầu tiên và được tái sử dụng cho các lời gọi tiếp theo với các giá trị tham số có thể khác nhau. –
Bạn đã bao giờ tìm ra vấn đề chưa? Tôi đang chạy vào cùng một điều, và tất cả các tham số của tôi là ints vì vậy tôi không thấy làm thế nào mà có thể là một vấn đề. – Justin