需要关于设计表分页的建议

Need Suggestion On Designing a Table Pagination

本文关键字:分页      更新时间:2023-09-26

问题声明:在Oracle表中,我有3000000条记录。用户希望在浏览器中看到这个表作为一个具有分页(每页100条记录)的表(jquery数据表)。当我设计它时,它大约有30000页。当用户单击单个页面时,我正在查询带有排序显示的表,它将返回那么多行。这里的问题是加载每个页面需要大约20秒的时间。

有人能建议我"如何应对这种情况吗?这样用户就不会觉得自己太慢了。在服务器端缓存这么多记录是不是一个好选择?"

查询类似于:

SELECT /*+ ALL_ROWS */ * FROM 
(SELECT ROWNUM SNO , A.* FROM 
( SELECT /*+ PARALLEL(ABCTABLE 4)*/ COUNT(*) OVER ( ) CNT, 
            columnA, columnb,columnc
             FROM ABCTABLE )
       order by columnA, columnb,columnc ) a )
       where sno between ? and ?;

和?:-页面范围为1到30/30到60/。。。。。

要提高性能,首先需要找到瓶颈。可能有很多事情:

  1. 由于查询计划不正确/缺少索引等原因,查询返回缓慢
  2. 由于网络速度慢,数据返回速度慢
  3. 数据在应用程序中呈现缓慢

没有人愿意浏览300万条记录。人们正在寻找一些东西。如果你添加一些合理的搜索/筛选条件和索引,你会得到一个更有用的应用程序。

大多数屏幕限制只显示30条记录。

想法是向用户显示30条记录,因为用户无法在孔中看到30000条记录,他必须向下滚动才能看到其余记录。

当他向下滚动时,尝试获取接下来的30条记录,直到你达到每页30000条记录。

您可以在Sql查询中使用limit来限制记录的数量,而不是提取所有记录,这将减少页面加载时间。

每页有1到30000、30001到60000等基数限制。

则在每个滚动上具有1到30 的SQL限制

sql_limit=base_limit+30

如果用户向下滚动到第30条记录的末尾,则获取新的30条记录

sql_limit+30

继续这个过程,直到你达到30000 的页面限制

直到sql_limit>=page_limit

若sqllimit超过pagelimit,则跳到新页面,并对每个页面再次执行相同的过程。

我仍然怀疑您的GUI用户是否能看到所有3000000条记录。他肯定对最近的行(过滤)大约1000条记录(10页)感兴趣,所以你可以更好地将前1000条记录传递给客户端,让客户端在每页显示100条记录,直到10页。之后,您可以ping服务器以查找接下来的1000条记录。

如果延迟发生在ORACLE获取中,请考虑对表进行索引以减少查询时间。http://www.codeproject.com/Articles/39006/Overview-of-SQL-Server-2005-2008-Table-Indexing-Pa

还要仔细检查解释计划。