LINQ to SQL分页性能随着行数的增加而降低

时间:2013-04-24 15:14:27

标签: sql-server-2008 optimization linq-to-sql

我有一个SQL Server数据库,其视图返回大量行。在我的项目中,LinqToSql正在对视图进行排序和分页,以便在数据网格中显示。

加载第一页的性能是可以接受的,但随着页面的进一步分页,每页加载的速度会降低。到达视图的最后几页,加载页面需要很长时间。

linq-to-sql生成的SQL页面是

SELECT [t1].[Client Id]
       ...
FROM  (SELECT ROW_NUMBER() OVER (ORDER BY [t0].[Last Name]) AS [ROW_NUMBER],
              [t0].[Client Id],
              ...
       FROM [dbo].[View_MemberEligibilitySearch] AS [t0]) AS [t1]
       WHERE [t1].[ROW_NUMBER] BETWEEN 50 /* @p0 */ + 1 AND 50 /* @p0 */ + 15 /* @p1 */
       ORDER BY [t1].[ROW_NUMBER]

有什么方法可以从SQL Server的角度优化这个?表中已经存在用于生成视图的所有索引。可以将索引添加到视图本身以提高此类查询的性能吗?

我意识到这个问题可以通过不使用视图来解决,但我正在寻找一些不需要重大代码更改的东西。

通过Linq-To-Sql的分页视图是否有效?

修改

更多细节。 该视图目前有350k记录 最后10秒和15秒需要o秒。时间与选择全表类似。

执行计划在具有相同350k记录的表的聚集索引扫描上占99%。 (视图的所有其他部分都是查找表,因为它们来自主键几乎没有时间)

可以在任何视图上重现此问题 从中创建视图 从MyBigTable中选择*

LinqToSql中的映射表 呼叫

MyTable.Skip(100000)。取(10)

0 个答案:

没有答案