我有一个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)