【发布时间】:2016-01-23 15:51:42
【问题描述】:
我正在做一些测试,直接 LINQ-to-SQL 查询的运行速度至少比通过 LINQ 查询调用存储过程快 80%
在 SQL Server 分析器中,一个通用的 LINQ 查询
var results = from m in _dataContext.Members
select m;
与存储过程相比,只用了 19 毫秒
var results = from m in _dataContext.GetMember(userName)
select m;
(GetMember 是存储过程)执行相同的查询需要 100 毫秒
这是为什么?
编辑:
在 Profiler 中直接的 LINQ 看起来像这样
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
存储过程是这样的
SELECT Members.*
FROM Members
WHERE dbo.Members.EmailAddr = @Username
所以您看到存储过程查询要简单得多.. 但速度较慢.. 对我来说毫无意义。
【问题讨论】:
-
看起来你的两个查询做的不一样。第二个接受一个参数(大概是为了限制结果),第一个显然只是获取所有行。对于初学者,你确定 SQL 是一样的吗?
-
存储过程中的 sql 与他们 linq 查询所做的相同......基本上你是正确的参数......通过 linq 查询返回所有行比返回单个更快存储过程中的行。
标签: linq-to-sql stored-procedures