0

我正在使用 LINQ 实现分页,并且正在考虑可能遇到的性能问题。假设我的页面大小为 10,并且我在表中有 100 条记录。如果我要使用以下

var myList = _dataContext.Person.Skip(PageNumber * PageSize).Take(10);

它会给我我想要的数据。现在,如果我要采用这种情况,并将其应用于 1,000,000 条记录。这会影响性能吗?在性能方面,使用 sql 存储过程是否更值得?

4

2 回答 2

2

在跳过和获取之前,这不会返回数据库中的所有行。如果你在ToList之后做了一个.Person,那么那将是非常低效的。你有什么应该没问题

于 2012-11-06T11:26:16.367 回答
1

与 Linq 提供程序为您生成的纯 SQL 文本相比,存储过程没有任何优势。

顺便说一句,您的查询将生成类似于以下 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变量时执行(例如 call ToList(), Count(), enumerate it)。因此,您在数据库中有多少人并不重要(好吧,这很重要,但这是数据库的一部分,而不是内存中的对象),并且您不会因使用存储过程而获得性能提升。

于 2012-11-06T11:26:19.677 回答