【发布时间】: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