【问题标题】:Need Suggestion On Designing a Table Pagination需要关于设计表格分页的建议
【发布时间】:2013-02-21 05:23:24
【问题描述】:

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

【问题讨论】:

    标签: java javascript performance jquery


    【解决方案1】:

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

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

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

    【讨论】:

    • 我正在使用索引。该查询还具有 Oracle 查询优化提示,如 /*+PARALLEL ( 4)、/*+PARTITION 等。
    【解决方案2】:

    大部分屏幕限制只显示 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 则跳转到新页面并对每个页面进行相同的处理。

    【讨论】:

      【解决方案3】:

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

      还要仔细检查explain plan

      【讨论】:

      • @sugumar ,从 3000000 中过滤 1000 条记录也需要时间。用户希望以毫秒为单位查看页面。
      • 您是否至少直接在 Oracle 中运行查询以查看该部分需要多长时间?
      • +1 是的,我同意 ElectricLlama;首先检查您的数据库如何响应?
      • 已经存在索引。我正在使用 oracle 10g。在表中存在 200 列,其中一列具有 xmlType 数据,每个 1 mb。
      • @sandeeppatel 你能告诉我们在 sqlplus 中获取 1000 行的执行时间吗?还将您的客户查询粘贴到您的问题中。
      猜你喜欢
      • 2014-03-30
      • 1970-01-01
      • 1970-01-01
      • 2011-05-20
      • 2012-09-24
      • 1970-01-01
      • 1970-01-01
      • 2011-11-13
      • 1970-01-01
      相关资源
      最近更新 更多