I was doing some testing and straight LINQ-to-SQL queries run at least 80% faster than if calling stored procedures via the LINQ query
In SQL Server profiler a generic LINQ query
var results = from m in _dataContext.Members select m;
took only 19 milliseconds as opposed to a stored procedure
var results = from m in _dataContext.GetMember(userName) select m;
(GetMember being the stored procedure) doing the same query which took 100 milliseconds
Why is this?
Edit:
The straight LINQ looks like this in Profiler
SELECT [t1].[MemberID], [t1].[Aspnetusername], [t1].[Aspnetpassword], [t1].[EmailAddr], [t1].[DateCreated], [t1].[Location], [t1].[DaimokuGoal], [t1].[PreviewImageID], [t1].[value] AS [LastDaimoku], [t1].[value2] AS [LastNotefied], [t1].[value3] AS [LastActivityDate], [t1].[IsActivated] FROM (SELECT [t0].[MemberID], [t0].[Aspnetusername], [t0].[Aspnetpassword], [t0].[EmailAddr], [t0].[DateCreated], [t0].[Location], [t0].[DaimokuGoal], [t0].[PreviewImageID], [t0].[LastDaimoku] AS [value], [t0].[LastNotefied] AS [value2], [t0].[LastActivityDate] AS [value3], [t0].[IsActivated] FROM [dbo].[Members] AS [t0]) AS [t1] WHERE [t1].[EmailAddr] = @p0
The stored procedure is this
SELECT Members.* FROM Members WHERE dbo.Members.EmailAddr = @Username
So you see the stored procedure query is much simpler.. but yet its slower…. makes no sense to me.
1) Compare like with like. Perform exactly the same operation in both cases, rather than fetching all values in one case and doing a query in another.
2) Don’t just execute the code once – do it lots of times, so the optimiser has a chance to work and to avoid one-time performance hits.
3) Use a profiler (well, one on the .NET side and one on the SQL side) to find out where the performance is actually differing.