我正在使用LINQ实现分页,并且我在考虑可能会遇到的性能问题。假设我的页面大小为10,一个表中有100条记录。如果我使用下面的代码
var myList = _dataContext.Person.Skip(PageNumber * PageSize).Take(10);它会让我得到我想要的数据。现在,如果我采用此方案,并将其应用于1,000,000条记录。这会影响性能吗?在性能方面,使用sql存储过程会更有价值吗?
发布于 2012-11-06 19:26:20
与纯SQL文本相比,存储过程没有任何优势,纯SQL文本由Linq提供程序为您生成。
顺便说一下,对于您的查询,将生成类似以下SQL的内容
SELECT /* [t0] fields */
FROM (
SELECT ROW_NUMBER() OVER (ORDER BY /* [t0] fields */
FROM [Person] AS [t0]
) AS [t1]
WHERE [t1].[ROW_NUMBER] BETWEEN @p0 + 1 AND @p0 + @p1
ORDER BY [t1].[ROW_NUMBER]只有当你使用myList变量(例如,调用ToList(),Count(),枚举它)时它才会被执行。因此,数据库中有多少人并不重要(当然,这是db部分,而不是内存中的对象),使用存储过程也不会带来性能提升。
发布于 2012-11-06 19:26:16
在跳过和获取之前,它不会返回数据库中的所有行。如果在.Person之后执行ToList,那么效率会非常低。你在那里的东西应该没问题
https://stackoverflow.com/questions/13249947
复制相似问题