我正在开发一个部署在Weblogic上的交易应用程序,它的限制是,任何处理超过一分钟的请求都会自动终止。该限制设置在内核级别,不依赖于应用程序,也不在我们的控制范围内进行更改。
在我的应用程序中有一个搜索功能,当在给定的时间框架内查询100多条记录时,它会失败,并且我被分配了一个任务来查看可能的解决方案。
我建议的第一种方法是使用分页,而不是同时查询所有记录。我被告知,这不会有帮助,因为在数据库方面,它将以任何方式同时获取所有记录。这对我来说是新的,因为到目前为止,我的理解是,这是在数据库端处理的,查询只获取每一页的记录数,并且每次使用前一页和下一页它都会处理它,从而缩短了整个响应时间。
在发布这个查询之前,我确实搜索了很多关于分页是如何工作的以及它是如何帮助缩短响应时间的,但是没有得到具体的答案。如果有人能帮我解释的话,那就太好了。提前谢谢!
发布于 2019-01-27 13:29:14
我建议的第一种方法是使用分页,而不是同时查询所有记录。我被告知,这不会有帮助,因为在数据库方面,它可以同时获取所有记录
如果在对分页的查询中使用限制和偏移子句,则为真。在这种情况下,数据库从磁盘加载匹配的记录(与WHERE子句匹配),然后应用偏移量和限制子句。由于数据库使用B树进行索引,它不知道跳到偏移记录而不将匹配的记录加载到内存中。
要只加载页面大小记录,需要使用key based pagination
。在这种方法中,我们避免使用偏移子句,而使用记录和限制子句的key
。
基于密钥的分页的示例:
假设您想要对用户进行分页
请求提供前10项记录:
select * from user where userid > 0 order by userid asc limit 10
假设上面查询中的最后一个userid是10。
请求提供以下10项记录:
select * from user where userid > 10 order by userid asc limit 10
https://stackoverflow.com/questions/54390244
复制相似问题