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

Java 需要关于设计表分页的建议吗,java,javascript,performance,jquery,Java,Javascript,Performance,Jquery,问题陈述:在Oracle表中,我有3000000条记录。用户希望在浏览器中将此表视为具有分页(每页100条记录)的表(jquery数据表)。当我设计它时,它大约有30000页。当用户单击单个页面时,我正在查询具有排序显示的表,它将返回那么多行。这里的问题是加载每个页面需要大约20秒的时间 有谁能建议我“如何解决这个问题?这样用户就不会感到自己的速度慢了。在服务器端缓存这么多记录是不是一个好的选择?” 查询类似于: SELECT /*+ ALL_ROWS */ * FROM (SELECT RO

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

我仍然怀疑您的GUI用户是否能看到所有3000000条记录。当然,他对1000条记录(10页)左右的最新行(过滤器)感兴趣,所以您可以更好地将前1000条记录传递给客户机,并让客户机在每页显示100条记录,直到10页。之后,您可以ping服务器以获取下一个1000条记录

如果延迟发生在ORACLE抓取中,请考虑对表进行索引以减少查询时间。


请再次检查。

我仍然怀疑您的GUI用户是否会看到所有300万条记录。当然,他对1000条记录(10页)左右的最新行(过滤器)感兴趣,所以您可以更好地将前1000条记录传递给客户机,并让客户机在每页显示100条记录,直到10页。之后,您可以ping服务器以获取下一个1000条记录

如果延迟发生在ORACLE抓取中,请考虑对表进行索引以减少查询时间。


另外,请再次检查。

要提高性能,首先需要找到瓶颈。这可能有很多方面:

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

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

    要提高性能,首先需要找到瓶颈。这可能有很多方面:

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

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

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

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

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

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

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

    然后在每个卷轴上有1到30的SQL限制

    sql\u限制=基本\u限制+30

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

    sql_限制+30

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

    直到sql\u限制>=页面\u限制


    如果sql限制超过页面限制,则跳转到新页面,并对每个页面再次执行相同的过程。

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

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

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

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

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

    然后在每个卷轴上有1到30的SQL限制

    sql\u限制=基本\u限制+30

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

    sql_限制+30

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

    直到sql\u限制>=页面\u限制


    如果sql\u限制超过页面限制,则跳转到新页面并对每个页面再次执行相同的过程。

    @sugumar,从300万条记录中筛选1000条记录也需要时间。用户希望以毫秒为单位查看页面。您是否至少直接在Oracle中运行查询以查看该部分需要多长时间?+1是的,我同意ElectricLlama;首先检查您的数据库如何响应?已经有索引了。我正在使用oracle 10g。在表200中有一列存在,其中一列有xmlType数据,每个数据为1 mb。@SandepPatel您能告诉我们用sqlplus获取1000行的执行时间吗?在您的问题中也粘贴您的客户端查询。@sugumar,从300万条记录中筛选1000条记录也需要时间。用户希望以毫秒为单位查看页面。您是否至少直接在Oracle中运行查询以查看该部分需要多长时间?+1是的,我同意ElectricLlama;首先检查您的数据库如何响应?已经有索引了。我正在使用oracle 10g。在表200中有一列存在,其中一列有xmlType数据,每个数据为1 mb。@SandepPatel您能告诉我们用sqlplus获取1000行的执行时间吗?在您的问题中也粘贴您的客户端查询。我使用索引。该查询还具有Oracle查询优化提示,如/*+并行(4),/*+分区等。我使用索引。该查询还具有Oracle查询优化提示,如/*+并行(4),/*+分区等。