2010-02-06 18 views
6

Truy vấn tạo LINQ có được lưu trữ hiệu quả bởi SQL Server 2008 không?Các truy vấn tạo ra LINQ có được lưu trữ hiệu quả bởi SQL Server 2008 không?

hoặc tốt hơn là sử dụng các thủ tục được lưu trữ với LINQ hoặc về chế độ xem và sau đó sử dụng các truy vấn LINQ được biên dịch ... ý kiến?

cổ vũ

nhấn mạnh ở đây là về "hiệu quả", và hoặc là nó tốt hơn ....

tức. các khung nhìn được lưu trữ tốt bởi máy chủ sql, và sau đó sử dụng linq trên khung nhìn ....

+0

tôi có nghĩa là ở đây cũng linq kết nối với các thủ tục được lưu trữ ... nhưng nếu nó là tốt hơn mà không linq cũng thú vị .... câu hỏi mở ... :-) – alex

Trả lời

2

Trên đầu trang của các câu trả lời đã được đưa ra theo Damien Guard có một trục trặc trong LINQ to SQL và EF LINQ nhà cung cấp mà không đặt độ dài biến luôn cho các truy vấn liên quan đến tham số chuỗi.

http://damieng.com/blog/2009/12/13/sql-server-query-plan-cache

Dường như đã được sửa trong .NET 4.0.

Trong quá khứ tôi đã viết lưu trữ của proc thay cho truy vấn LINQ, chủ yếu cho các truy vấn báo cáo phức tạp hơn là CRUD đơn giản nhưng chỉ sau hồ sơ của ứng dụng của tôi.

+0

eeek thats xấu xí ... không biết rằng về linq vì vậy những gì về quan điểm ... – alex

+0

Số lượt xem sẽ được xử lý theo cách giống hệt như những cái bàn. –

1

L2S chỉ chuyển các truy vấn đến SQL Server 2008. Vì vậy chúng sẽ được lưu trữ hoặc không được lưu trữ, giống như bất kỳ truy vấn nào khác được gửi bởi bất kỳ quá trình khác. Thực tế là một truy vấn LINQ được biên dịch không có tác động đến cách SQL Server xử lý truy vấn.

+0

tôi nhận ra rằng các truy vấn được biên dịch không có tác động trên máy chủ sql nhưng trên toàn bộ quá trình, tức là. các biểu thức phân tích cú pháp vv Vì vậy, nếu đó là biên dịch và sau đó sử dụng một cái nhìn lưu trữ/proc lưu trữ ... – alex

+0

@alex - Nó không làm cho bất kỳ sự khác biệt những gì L2S để chuẩn bị để gửi truy vấn, cho dù đó là một truy vấn được biên dịch , biểu hiện phân tích cú pháp cây, vv, nó không ảnh hưởng đến cách SQL Server xử lý truy vấn. Nhiều yếu tố đi vào việc liệu SQL Server sẽ tái sử dụng một truy vấn được lưu trữ, nhưng L2S ​​không có gì để làm với điều này. –

1

Truy vấn LINQ tạo là các truy vấn SQL bình thường như truy vấn SQL thủ công của riêng bạn và chúng tuân theo cùng các quy tắc: nếu văn bản truy vấn là giống hệt nhau (xuống dấu phẩy và khoảng trắng cuối cùng) so với văn bản truy vấn trước đó , rất có thể là kế hoạch thực hiện truy vấn của nó có thể đã được lưu vào bộ nhớ cache và do đó có thể được sử dụng lại.

Vấn đề là: nội dung truy vấn phải là hoàn toàn giống hệt nhau - nếu ngay cả một khoảng trắng duy nhất là khác nhau, SQL Server xem xét nó một truy vấn mới và do đó sẽ phải trải qua quá trình đầy đủ các phân tích cú pháp, phân tích, tìm ra một truy vấn lập kế hoạch và thực hiện nó.

Nhưng về cơ bản, có - truy vấn được gửi bởi LINQ sẽ được lưu vào bộ nhớ cache và sử dụng lại - nếu chúng đáp ứng các tiêu chí đó!

+0

tôi nghĩ rằng ms sql 2008 có thể quyết định sử dụng parametrization đơn giản ... sql 2008 internals p 533 ... và cũng là posibility của parametrization buộc – alex

+0

có, nếu bạn có một truy vấn parametrized, sau đó bạn có văn bản truy vấn giống hệt nhau cho một số lượng yêu cầu lặp lại - và sau đó kế hoạch truy vấn sẽ rất có thể được lưu trữ và tái sử dụng –

Các vấn đề liên quan