java - 分页如何工作以及在处理数百万条记录时它如何帮助减少响应时间?

标签 java oracle pagination

我正在开发一个部署在 Weblogic 上的交易应用程序,它有一个限制:任何处理时间超过一分钟的请求都会被自动终止。该限制是在内核级别设置的,与应用程序无关,并且我们无法控制更改。

我的应用程序中有一个搜索功能,在给定时间范围内查询超过 100 条记录时会失败,我被分配了一项任务来查看可能的解决方案。

我建议的第一种方法是使用分页而不是同时查询所有记录。我被告知这不会有帮助,因为在数据库方面它会以任何方式同时获取所有记录。这对我来说是新的,因为到目前为止我了解到这是在数据库端处理的,并且查询仅获取每页给定数量的记录,并且对于每个上一个和下一个它都会处理它,从而减少总体响应时间。

在发布此查询之前,我确实搜索了很多关于分页如何工作以及它如何帮助减少响应时间的查询,但没有得到具体的答案。如果有人能帮助我解释这一点,那就太好了。提前致谢!!!

最佳答案

The first approach that I suggested was to use pagination instead of querying for all records at the same time. I was told that it won't help as on the database side it would any ways fetch all records at the same time

如果您在分页查询中使用 LIMIT 和 OFFSET 子句,则情况如此。在这种情况下,数据库从磁盘加载匹配的记录(与WHERE子句匹配),然后应用OFFSET和LIMIT子句。由于数据库使用B树进行索引,因此不将匹配的记录加载到内存中,它不知道直接跳转到OFFSET记录。

要仅加载页面大小记录,您需要使用基于键的分页。在这种方法中,我们避免了 OFFSET 子句,而是使用记录的key 和 LIMIT 子句。

基于键的分页示例:

假设您想要对用户进行分页

请求前 10 条记录:

 select * from user where userid > 0 order by userid asc limit 10

假设上面查询中的最后一个用户 ID 是 10。

请求接下来的 10 条记录:

select * from user where userid > 10 order by userid asc limit 10

关于java - 分页如何工作以及在处理数百万条记录时它如何帮助减少响应时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54390244/

相关文章:

php - Codeigniter 分页不显示查询结果的第一行

java - 如何体现子类的两个对象永不过期?

java - JDBC CallableStatement 和 Oracle SYS_REFCURSOR IN 参数?

java - 使用 Maven 修改存档

sql - 停止 SQL 代码执行

数据库设计 - 是否应将日期用作主键的一部分

c# - MVC如何为大型结果集添加分页

Javascript 表格的分页

Java/Scala资源消耗和负载

java - 使用 "for loop"创建按钮数组并使用其中的值更改 boolean 数组值