首页 > 其他分享 >如何高效分页

如何高效分页

时间:2024-06-30 18:20:54浏览次数:1  
标签:queryWrapper 高效 pageNum 分页 pageSize int 如何 startId

传统的分页,是基于offset进行分页,如果页码数很大的情况下,每次都需要遍历之前的offset+N条数据,
在分页多的时候容易出现MySQL性能瓶颈,所以我们可以基于取前一页的最大行数的id(将上次遍历到的最末尾的数据ID传给数据库,然后直接定位到该ID处,再往后面遍历数据)
然后根据这个最大的id来限制下一页的起点

  • 这也是一种常见的MySQL优化手段

代码如下

    public IPage<User> getUsersByPage(int pageNum, int pageSize) {
        Long startId = getStartIdByPage(pageNum, pageSize);
        if (startId == null) {
            // 如果起始ID为null,说明没有数据,返回空分页
            return new Page<>(pageNum, pageSize, 0);
        }
        return getUsersAfterId(startId, pageSize);
    }


    public Long getStartIdByPage(int pageNum, int pageSize) {
        // 查询第(pageNum - 1) * pageSize条记录的最后一个主键ID
        int offset = (pageNum - 1) * pageSize;
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.orderByAsc("id").last("LIMIT " + offset + ", 1");
        User user = userMapper.selectOne(queryWrapper);
        return user != null ? user.getId() : null;
    }


    public IPage<User> getUsersAfterId(Long startId, int limit) {
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.gt("id", startId - 1);
        Page<User> page = new Page<>(1, limit);
        return userMapper.selectPage(page, queryWrapper);
    }

标签:queryWrapper,高效,pageNum,分页,pageSize,int,如何,startId
From: https://www.cnblogs.com/zhangyf1121/p/18276774

相关文章

  • 抖音矩阵源码如何获取?抖音自动发布工具有哪些?
         在如今这个短视频流量的时代,抖音作为其中的佼佼者,吸引了无数创作者和商家入驻。如何在这个平台上建立起自己的矩阵,实现多账号运营,从而提高曝光度和收益呢?本文将带你了解抖音矩阵源码如何获取,以及市面上流行的抖音自动发布工具。一、抖音矩阵源码如何获取?抖音......
  • 如何从华为恢复永久删除的视频?
    在从华为恢复永久删除的视频时,这个过程可能很艰难。您可能想知道,如何从华为恢复永久删除的视频?本指南全面概述了有效的恢复方法。无论删除是意外还是由于其他问题,一些策略和工具都可以帮助您恢复宝贵的视频内容。我们将探索这些选项,提供清晰实用的建议,以帮助您恢复失去的记忆。......
  • LangChain技术报告:如何构建可靠智能体Agent?
    LangChain团队技术报告:报告人:LanceMartin报告人信息:LangChain的软件工程师报告主题:“构建与测试可靠智能体”主题原文:“Architecting+testingreliableagents”报告概要内容如下:构建一个可靠的Agent是一个复杂的过程,涉及到多个方面,包括控制流的设定、工具调用、Agent......
  • 【Docker Compose】掌握容器资源管理:高效限制CPU与内存使用
    【DockerCompose】掌握容器资源管理:高效限制CPU与内存使用一、DockerCompose介绍1.1DockerCompose简介1.2DockerComposeV2简介1.3DockerComposeV1与V2版本区别1.4docker-compose.yaml部署文件介绍二、检查本地docker环境2.1本地环境规划2.2......
  • 如何借助 LLM 设计和实现任务型对话 Agent
    1引言在人工智能的快速发展中,任务型对话Agent正成为提升用户体验和工作效率的关键技术。这类系统通过自然语言交互,专注于高效执行特定任务,如预订酒店或查询天气。尽管市场上的开源框架如Rasa和MicrosoftBotFramework在对话理解和管理方面已经取得了不错的进展,但仍......
  • 如何刻画复杂事件
    前言复杂事件的刻画✍️[网摘整理]设\(A\),\(B\)是试验\(E\)的随机事件,深入体会用基本事件的和或积的运算来刻画复杂事件,并熟练掌握:①\(A\)发生:\(A=AB+A\bar{B}\);②只有\(A\)发生:\(A\bar{B}\);③\(A\),\(B\)恰有一个发生:\(A\bar{B}\)+\(\bar{A}B\);④\(A\),\(B\)同时发......
  • 如何读取 ALV 列表中保存的布局元数据?
    我有一个ALV列表作为程序的输出,并且需要能够动态获取/提取列及其位置。用户还可以将列/位置保存为布局以供将来使用,我希望获取已保存布局的相关信息。我希望以内部表格的形式获取ALV列表的列及其位置,以便进一步使用,例如,生成.xls文件。获取和保......
  • 生信实证系列Vol.15:如何用AlphaFold2,啪,一键预测100+蛋白质结构
    ​​ "结构就是功能"——蛋白质的工作原理和作用取决于其3D形状。​2020年末,基于深度神经网络的AlphaFold2,一举破解了困扰生物学界长达五十年之久的“蛋白质折叠”难题,改变了科学研究的游戏规则,可以从蛋白质序列直接预测蛋白质结构,实现了计算机蛋白质建模极高的精确度。​自A......
  • 初学者必读:如何使用 Nuxt 中间件简化网站开发
    title:初学者必读:如何使用Nuxt中间件简化网站开发date:2024/6/24updated:2024/6/24author:cmdragonexcerpt:本文概述了Nuxt3框架的升级特点,对比Nuxt2,详细解析中间件应用、配置策略与实战示例,涵盖功能、错误管理、优化技巧,并探讨与Nuxt3核心组件集成方法,给出最佳......
  • Linux如何远程访问?
    远程访问是现代计算机网络中非常重要的一个功能,它允许用户通过网络连接到远程计算机,并在远程计算机上执行操作。对于使用Linux操作系统的用户来说,Linux远程访问是非常常见的需求。本文将介绍如何实现Linux远程访问,并简要介绍一款名为【天联】的组网产品。Linux远程访问的基础......