0

问题陈述:在 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/.....

4

3 回答 3

1

我仍然怀疑您的 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

还要仔细检查解释计划

于 2013-02-21T05:30:54.320 回答
1

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

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

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

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

有这样的基本限制,每页 1 到 30000、30001 到 60000 等等。

然后在每个滚动条上的 SQL 限制为 1 到 30

sql_limit = base_limit + 30

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

sql_limit+30

继续此过程,直到达到 30000 页限制

直到 sql_limit >= page_limit

如果 sql_limit 超过 page_limit 则跳转到新页面并再次对每个页面执行相同的处理。

于 2013-02-21T08:55:56.633 回答
1

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

  1. 由于查询计划错误/缺少索引等,查询返回缓慢。
  2. 由于网络慢,数据返回缓慢
  3. 数据在您的应用程序中呈现缓慢

没有人愿意浏览 300 万条记录。人们正在寻找一些东西。如果您添加一些合理的搜索/过滤条件和索引,您将获得更有用的应用程序。

于 2013-02-21T05:38:00.077 回答