分页是如何工作的?在处理数百万条记录时,它如何帮助减少响应时间



我正在开发一个交易应用程序,该应用程序部署在Weblogic上,有一个限制,即任何处理时间超过一分钟的请求都会自动终止。该限制是在内核级别设置的,不依赖于应用程序,也不在我们的控制范围内进行更改。

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

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

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

我建议的第一种方法是使用分页,而不是同时查询所有记录。我被告知这不会有帮助,因为在数据库方面,它会以任何方式同时获取所有记录

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

要只加载页面大小的记录,需要使用key based pagination。在这种方法中,我们避免使用OFFSET子句,而是使用record的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

最新更新