我正在使用LINQ实现分页,我正在考虑我可能遇到的性能问题。可以说我的页面大小为10,我在表中有100条记录。 如果我要使用以下
var myList = _dataContext.Person.Skip(PageNumber * PageSize).Take(10);
它会得到我想要的数据。现在,如果我采取这种情况,并将其应用于1,000,000条记录。这会影响性能吗?是否更值得使用sql存储过程,性能明智吗?
答案 0 :(得分:2)
如果您在ToList
之后执行了.Person
,则效率非常低。你有什么应该没关系
答案 1 :(得分:1)
存储过程与Linq提供程序为您生成的纯SQL文本相比没有任何优势。
对于您的查询,BTW 会生成以下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()
,枚举它)。因此,在数据库中有多少人并不重要(好吧,但这是数据库部分,而不是内存中的对象),并且使用存储过程不会提高性能。