2013-02-21 67 views
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/.....

回答

1

我仍然怀疑你的GUI用户会看到所有的3000000记录。肯定他对1000条记录(10页)的最新行(过滤器)感兴趣,所以你最好先将1000条记录传递给客户端,让客户端在每个页面上显示100条记录直到10页。之后,您可以为下一个1000条记录ping服务器。

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

还仔细检查explain plan

+0

@sugumar,从3000000过滤1000条记录也需要时间。用户希望以毫秒为单位查看页面。 – 2013-02-21 05:33:10

+1

您是否至少直接在Oracle中运行查询以查看该部分需要多长时间? – 2013-02-21 05:49:37

+0

+1是的,我同意ElectricLlama;首先检查你的数据库如何响应? – 2013-02-21 05:54:59

1

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

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

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

+0

我正在使用索引。查询还具有Oracle Query优化提示,如/ * + PARALLEL( 4),/ * + PARTITION等。 – 2013-02-22 05:45:11

1

大部分屏幕限制只显示30条记录。

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

当他向下滚动时,尝试获取下一个30条记录,直到您达到每页30000条记录。

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

具有像这样的基数限制1至30000,30001至60000等每页。

然后在每个滚动具有1至30

sql_limit的SQL极限= base_limit + 30

如果用户向下滚动到第30记录的端然后提取新30个记录

sql_limit + 30

继续这个过程,直到你到达页数限制其30000

直到sql_limit> = page_limit

如果sql_limit超过page_limit,则跳转到新页面并对每个页面重新执行相同的过程。