问题陈述:在Oracle表格中,我有3000000条记录。用户希望在浏览器中将此表视为具有分页的表(jquery数据表)(每页100条记录)。当我设计它时,大约有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 /.....
答案 0 :(得分: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
同时仔细检查explain plan。
答案 1 :(得分:1)
要提高性能,首先需要找到瓶颈。这可能是一些事情:
没有人想浏览300万条记录。人们正在寻找一些东西。如果您添加一些合理的搜索/过滤条件和索引,您将获得更有用的应用程序。
答案 2 :(得分: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,则跳转到新页面并再次对每个页面执行相同的处理。