1- Stored Procedure and compiled SQL query có tốc độ thực thi nhanh nhất vì nó gần với dữ liệu trên CSDL nhất
2- LINQ là thư viện cho phép truy vấn trên nhiều kiểu dữ liệu khác nhau: Object collections, XML, LINQ to SQL (truy vấn cơ sở dữ liệu MS-SQL), LINQ to Dataset, LINQ to Entity (ADO.net Entity Framework), LINQ to SharePoint, LINQ to XML, LINQ to nHIbernate, LINQ to XYZ, LINQ to Azure SQL Service….
Như vậy là cái 1: mục tiêu chạy thật nhanh, nhưng tính mở rộng kém, khả năng bảo trì kém.
Cái 2: một cú pháp lập trình chung–> tính mở rộng rất cao.
Khi nào dùng Stored Procedure, SQL query?
Khi chúng ta viết ứng dụng Client-Server, khá thuần về công nghệ, ít có sự tương tác với nhiều nguồn dữ liệu khác nhau. Ứng dụng logic có khả năng bảo trì được trong giới hạn cho phép. Phần cứng máy chủ hạn chế, viết Stored Proc để tối ưu tốc độ.
Nên viết LINQ khi hệ thống phức tạp, việc bảo trì theo thời gian là rất lớn, Viết LINQ hợp lý sẽ chuyển nhiều logic từ server xử lý lên business layer. Giờ đây xu hướng, chúng ta không viết LINQ to SQL thuần túy nữa, mà chúng ta nên sử dụng ADO.net Entity Framework, EF4.
EF4 cho phép:
1- Ánh xạ mềm dẻo cấu trúc bảng ở CSDL vào cấu trúc quan hệ, hướng đối tượng của các object entities trong .NET business layer
2- Vẫn có thể chạy, gọi các câu lệnh dynamic SQL và stored procedure để tận dụng những tính năng lập trình đặc biệt của CSDL
3- Giảm bớt số câu lệnh nặng tính thủ tục (procedural code) để Create Read Update Delete dữ liệu.
4- Thể hiện những mối quan hệ phức tạp như: thừa kế…
Tóm lại, Entity Framwork còn hơn cả LINQ to Entities; nó bao gồm một lớp lưu trữ cho phép bạn dùng cùng mô hình ứng dụng mức khái niệm thông qua giao diện ADO.NET ở mức thấp dùng Entity SQL, và trả lại kết quả một cách hiệu quả nhờ các DataReader, giảm thiểu tải khi dùng trong các ngữ cảnh chỉ có đọc và không có các xử lý thêm.
Nếu so sánh trên cùng một câu truy vấn giữa LINQ và SP hoặc ANSI SQL thì rõ ràng LINQ thua. Nhưng nếu tính trên phương diện cả bài toán thì chưa chắc. Thực tế mình đã và đang làm việc với REPORT, trong một dự án tầm cỡ quốc gia. REPORT có sử dụng cả SP và LINQ, mình thấy rằng có một số REPORT nếu sử dụng SP phải mất đơn vị hàng 1000 dòng code SQL, trong khi sử dụng LINQ chỉ mất đơn vị là 100 dòng code C#. Tương ứng với nó là performance của LINQ còn khá hơn khi dùng SP. Do đó, hầu hết mình đã dùng LINQ thay thế cho SP.
SP chạy nhanh hơn vì nó được biên dịch trước bởi sql server. Còn khi bạn truy xuất với linq thì linq sẽ biên dịch đoạn mã c# -> t-sql. Vậy đương nhiên là chậm hơn rồi. Tuy nhiên nếu bạn để ý, linq cung cấp các giải pháp khá linh hoạt cho việc lựa chọn SP thay cho việc dùng câu lệnh được biên dịch lúc thực thi. Và cũng hỗ trợ rất tốt việc gọi sp. Đó là chuyển các SP và user function thành 1 phương thức trong lớp Data Context.