【问题标题】:Is there really any performance benefit in using pagination in web pages?在网页中使用分页真的有任何性能优势吗?
【发布时间】:2015-12-17 14:02:14
【问题描述】:

我正在使用 struts 作为框架用 Java 编写一个网站,我尝试使用分页来中断一个可能需要很长时间才能返回的查询,使用类似于以下的查询:

select col
from   ( select col,rownum AS rn from table )
where  rn >= 1
and    rn <=10

这是我所看到的进行分页的标准方法,但我没有看到仅选择整个表并仅在 Java 中分页的性能改进,因为 Oracle 计算 rownum,它必须执行一次我的查询。

理想情况下,我只想搜索此表结果的子集,而不是搜索整个表然后丢弃部分结果。 有没有办法做到这一点?因为如果不是,我不明白为什么延迟分页会比加载整个列表然后在 Java 中分离更好。

【问题讨论】:

  • 你说的行数是多少? 100? 1000? 1000000?
  • 您要处理什么尺寸的表格?这些表格是否会不断更新?
  • 在包含 10.000.000 个条目的数据库上尝试一下。我很确定你会看到一些优势
  • 如果是用于搜索子集,请尝试将“WHERE”添加到您的 SQL 中。至于分页,我看到你没有太多数据。尝试使用包含 1000 万条记录的表。你会看到分页是相关的。
  • 好吧,我没有尝试太多其他方法,因为这是对来自我见过的数据库的结果进行分页的唯一方法,我不知道如何获得这些结果。现在我尝试在一个或多或少的空表中,结果还可以,但是看到它在没有过滤器的情况下执行子查询,我想知道这是否与仅执行子查询并在 Java 中破坏它不同。还有一个屏幕我们尝试过这种方法,可能是sql写得不好,由于行数很大,每次都会报socket错误,但即使分页只带20行,结果也没有什么不同。

标签: java oracle pagination


【解决方案1】:

有,但在你有足够的数据来模拟一个完全成长的数据库之前你不会看到它。

正如其他人在 cmets 中提到的,在您的表中生成几百万行,然后然后开始使用分页并观察您的查询计划。现在您有了一些具有现实生活气息的东西,您可以将其与将表缓存在内存中进行比较。

【讨论】:

  • 啊,我明白了,分页受益于查询缓存,所以第一次查询可能有点慢,但以后会更快。谢谢
  • 只是为了改写我的最后一条评论,并不是它在缓存上运行,我只是尝试使用数据库中最大的表之一,可以看到即使子查询没有过滤器,分页很快就能得到结果
  • 另外,如果你在内存中缓存表,在你的应用程序中,你必须在数据库中的表发生变化时更新它:-)
猜你喜欢
  • 2013-07-04
  • 2010-09-06
  • 2015-01-06
  • 2017-03-04
  • 1970-01-01
  • 2020-01-10
  • 2010-09-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多