如何提高ASP.Net动态数据分页性能

本文关键字:数据 分页 性能 动态 Net 何提高 ASP | 更新日期: 2023-09-27 18:06:58

我正在使用ASP。网络动态数据。Net Framework版本4.0)和SQL Server 2008来显示一组表中的数据。在数据库中有一个主表,包含83列和854581行数据,这些数据仍有望增长。

我对默认模板做了很少的修改,大多数操作对于商业网站来说都足够灵活,包括过滤,外键显示等。然而,传呼机被证明是一个主要的性能问题。

在我使用Database Tuning Advisor进行任何优化之前,主表列表页面甚至不会显示为简单的计数查询超时。经过所有优化后,前几百个页面的显示没有问题,但超过1000个页面的显示速度慢得令人难以忍受,最后一个页面会超时。

请注意,我使用Database Tuning Advisor优化了最后一页的查询,它根本没有给我任何建议。

我尝试使用row_number()运行一个非常简单的查询来查看最后一页,类似于下面的查询:

SELECT TOP 10* FROM 
    (SELECT *, row_number() OVER (ORDER BY [Primary Key Column] ASC) AS [rn]
     FROM [Master Table]) AS TB1
WHERE TB1.rn > 854580

上面的查询在第一次执行时花了大约20秒来完成,而SQL Server服务sqlservr.exe消耗了1,700 KiB的内存(我使用的是32位窗口,没有特殊的内核开关,因此,每个进程最多有2 GiB的地址空间)。

所以,我的问题是,是否有比使用row_number()在ASP中做分页更有效的方法?Net动态数据和如何实现。

我想到了两种可能性:

  1. 有一些神奇的T-SQL语言结构具有更好的性能,例如,MySQL中的LIMIT <From row number>, <To row number>
  2. 我在表中添加了一个序列号列,当没有过滤或排序时,根据该编号进行分页
也许更大的问题是如何在ASP中实现这种自定义分页。网络动态数据。任何帮助都是感激的,即使分页样本不打算提高性能,只是给我一个想法。

注意:我不能改变我使用的数据库引擎,所以不推荐MySQL或PostgreSQL或类似的东西

如何提高ASP.Net动态数据分页性能

20秒很长,即使是100万行-检查你的SQL Server索引!

还要确保只检索List视图中所需的数据列。(你提到83列....您不会在列表视图中显示所有这些。

我能想到的另一种方法是使用Linq查询表达式Skip()和Take()在分页时每次获取一个页面。当然,这意味着您将查询更少的数据,更频繁。