记录分库分表的分页查询

分库分表的分页查询。不同的业务场景可能不同。我只记录自己的分页方法

public PageAO<User> selectByPage(Filter filter, int page, int size) {//每页条数int pageSize = size < 1 ? 10 : size;//计算起始位置int pageIndex = page < 1 ? 0 : (page - 1) * pageSize;//记录查询数据条数时的,查询条数,可能动态变化,比如共需要十条数据,第一个表查询5条,则第二个表只需要查询5条即可int currentPageSize = pageSize;//统计所有分表,满足条件的总条数long total = 0;//返回结果集List<UserDo> respList = new ArrayList<>();//处理查询的条件param param = getParam(filter);//循环所有分表,依次查询for (int tableIndex = 0; tableIndex < dbProperties.getTableSize(); tableIndex++) {// 锁定分表,将当前查询置为一个具体表查询lockTaskTableIndex(tableIndex);//统计当前表满足条件的记录条数long count = mapper.countByParam(param);//释放分表,再需要查询数据时,再重新锁定分表releaseTaskTableIndex();//如当前表满足条件数为0,则直接跳过当前分表。不需要继续判断if (count == 0) {continue;}//将满足条件的记录条数统计到总数。统计所有分表total += count;//当前表统计结果减去起始位置结果为负数,则从当前表开始查询,否则顺序查询下一张表。如果为0则表示当前表数据刚好满足需要的总条数int index = pageIndex - Long.valueOf(count).intValue();//主要计算当前分表数是否满足,起始位置。如果为0,则表示截止当前分表,刚好满足limt跳过的数据条数。则跳过当前分表,从下一分表查询即可if (index >= 0) {//改变查询索引,比如查询第二页,起始索引为10,第一页满足6条,则第二页起始位置从10-6=4条开始pageIndex = index;continue;//如果需要的记录条数满足请求的页数,则不继续查询数据了。但需要继续循环分表,统计符合条件的总条数} else if (currentPageSize <= 0) {continue;}// 锁定分表,查询数据lockTaskTableIndex(tableIndex);//设置分页信息,起始位置,及条数,limit 1,10param.setCustomizePagination(pageIndex, pageSize);//若小于等于0,则需要开始查询数据List<UserDo> list = mapper.selectByParam(param);//将查询出来的数据,添加到集合等待最后返回respList.addAll(list);//若当前表记录条数不满足需要的页数,则需要查询下一张表,下一张表的起始位置为0pageIndex = 0;//列,每页需要十条,但当前表只获取了5条,则下一页只需要获取5条即可currentPageSize = pageSize - respList.size();//释放当前分表releaseTaskTableIndex();}//封装返回结果集return DbUtil.convert(respList, page, size, total, this::toUser);}

68fe300d572a46baa8409cc6e446265b.png

当前表统计结果减去起始位置结果为负数,则从当前表开始查询,否则顺序查询下一张表。若果结果集满足查询条数则返回数据,否则查询下一张表。且起始位置为0,至到满足结果集条数或分表查询完为止。 

 查询第一页:锁定第一张表,count条数为6。(0-6=-6)结果为负数,则从当前表开始查询,起始位置为0,size=10。查询结果条数为6不满足size10.
则查询下一张表,起始位置为0,查询条数为(10-6=4)以此类推

查询第二页:count第一张表结果为6。(10-6=4)不为负数,则查询第二张表。Count条数为9.(4-9=-5)结果为负数。则从第二张表开始查询
第二张表由索引下标4开始查询,size=10。最终查询结果为后五条。总记录条数为(10-5=5),由于查询记录条数不够。则取第三张表。记录条数不够的跳表。下标为0,查询条数为剩余的记录条数。(0,5) 

查询第三页。Count第一张表,记录条数为6,(20-6=14)结果不为负数,表示需要继续跳过,统计第二张表,记录条数为9(14-9=5)结果不为负数
继续跳过,count第三张表,记录条数为0(6-0=6)不为负数,继续跳过。统计第四张表,记录条数为15.(5-15=-10)结果为负数,则需要从当前表
开始查询,第四张表:limt 5,10。查询结果条数为10.(查询结果条数10-需要结果条数10=0)满足需要结果条数,返回结果数据 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/442638.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c++查询当前文件夹下文件数目_python3自动化小工具--删除某个文件夹xx后缀文件...

源码 DelSomeFile.py""" 此代码用于删除文件夹下面以txt结尾的文件 &#xff08;同理将.txt-->.py可以删除py文件&#xff09; 借用pyqt5调用文件选择对话框看起来比较人性化点 本来是用win32ui的&#xff0c;但是win32ui不太人性化&#xff0c;不能选择文件…

creo组装后怎样移动元件_BGA元件SMT装配工艺要点简介

当SMT&#xff08;表面贴装技术&#xff09;/SMD&#xff08;表面贴装器件&#xff09;从业者发现间距为0.3mm的QFP&#xff08;四方扁平封装&#xff09;无法实现时&#xff0c;BGA&#xff08;球栅阵列&#xff09;的出现肯定会减少装配缺陷确保SMT质量成就。从系统理论的角度…

burpsuite csrf攻击_WEB安全之CSRF

大家好&#xff0c;我是阿里斯&#xff0c;一名IT行业小白。今天分享的内容是CSRF相关知识&#xff0c;不求表哥们打赏&#xff0c;只求点点在看&#xff0c;点点转发。CSRF漏洞概述CSRF(Cross-Site Request Forgery),中文名为跨站请求伪造&#xff0c;是一种Web攻击方式。该漏…

财物机器人英文ppt演讲课件_“如何恰当使用课件动画”

每晚21&#xff1a;30分享教师干货记得当大姜老师还是一名稚嫩的大一新生时&#xff0c;由于小时候家里管的比较严&#xff0c;几乎没什么碰电脑的机会。即便有了难得的机会&#xff0c;也都用来打游戏了......直到上了大学&#xff0c;需要做各种的汇报PPT、课件PPT、演讲PPT&…

curl 请求日志_kong api网关日志 将请求和响应数据附加到磁盘上的日志文件中

术语plugin&#xff1a;在请求被代理到上游API之前或之后&#xff0c;在Kong内部执行操作的插件。Service&#xff1a;表示外部上游 API或微服务的Kong实体。Route&#xff1a;Kong实体&#xff0c;表示将下游请求映射到上游服务的方法。Consumer&#xff1a;表示使用API​​的…

怎么主动发起话题_为什么男生不愿意主动追求女生了?这或许是最终的核心原因...

作为一个在情感领域和心理学领域深耕了许久的半吊子研究人员&#xff0c;对于情感话题一向都比较感兴趣。为什么男生不愿意主动追求女生了&#xff1f;这大概是近两年两性恋爱关系中最热门的话题了&#xff0c;每次都想在问答中回复&#xff0c;都没有想到一个完整的答案&#…

关闭 Pycharm 更新提示

File > settings > Appearance & Behavior > System Settings > Upadates 取消勾选 Automatically check updates for ……

golang errors 取 错误 信息_Golang 单元测试:有哪些误区和实践?

背景测试是保证代码质量的有效手段&#xff0c;而单元测试是程序模块儿的最小化验证。单元测试的重要性是不言而喻的。相对手工测试&#xff0c;单元测试具有自动化执行、可自动回归&#xff0c;效率较高的特点。对于问题的发现效率&#xff0c;单测的也相对较高。在开发阶段编…

节能prru进入深度休眠节能_2021-2024年中国工业节能行业深度调研及投资前景预测报告...

近年来&#xff0c;随着供给侧结构性改革不断深化&#xff0c;工业经济发展势头良好&#xff0c;转型升级步伐进一步加快&#xff0c;生产稳定增长、结构持续优化、效益明显提高、新动能加速成长。随着中国工业节能的政策推力逐渐加大&#xff0c;工业节能市场迅速发展&#xf…

多布局怎么搭建_关键词SEO优化怎么做?具体包括哪些方面?

在互联网的活动中&#xff0c;网站优化是企业们提升网站排名的常用方法之一&#xff0c;这也是进行线上获客的重要手段&#xff0c;超过75%的中小企业都非常认可这种营销方式。但是&#xff0c;想要做好关键词的优化&#xff0c;网站关键词定位、关键词布局、关键词密度等等都是…

使用特征_R语言-使用caret包实现特征选择:递归特征消除(RFE)算法

在caret&#xff08;short for classification and regression training&#xff09;包中有多个函数可以实现特征选择&#xff0c;总的分为封装法和过滤法。封装法&#xff0c;将特征选择过程与训练过程融合在一起&#xff0c;以模型的预测能力作为特征选择的衡量标准。封装法可…

7 centos 查看程序文件数量_「动手打造家庭媒体网络平台」安装篇-centos搭建DLNA媒体服务...

大家好&#xff0c;我是路程lucky&#xff0c;热爱开发、设计、学习、生活、爱捣鼓的web前后端工程师~本文的重点是在之前文章提到创建的centos基础上继续搭建DLNA媒体服务。由于centos的系统是从零开始初步安装完成&#xff0c;我们在安装媒体服务时&#xff0c;不可避免出现各…

python 逻辑回归准确率是1_python数据分析(三)——逻辑回归之学生成绩预测

Python数据分析项目——学生成绩预测一&#xff0e;数据源阿里云天池公开数据集&#xff1a;学生成绩预测数据集https://tianchi.aliyun.com/dataset/dataDetail?dataId6785特征(Features)介绍&#xff1a;Gender: 性别Nationality: 国籍PlaceofBirth&#xff1a;出生地StageI…

向量数量积公式_多法 | 向量数量积相关最值问题的常见处理方法

近日QQ群更新的部分内容如下高中11大类86个易错点全梳理(185页Word)恒成立涉及10大类40小类题型梳理(100页Word)高中数学10大专题100个考点配例题全梳理2020高考真题分类汇编理科(14讲Word)2019年江苏高考数学题根系列(50份Word)2020届江苏高三上期中期末分类汇编(12讲Word)202…

kettle增加字段报错_【实战】使用 Kettle 工具将 mysql 数据增量导入到 MongoDB 中

每一个成功人士的背后&#xff0c;必定曾经做出过勇敢而又孤独的决定。放弃不难&#xff0c;但坚持很酷~最近有一个将 mysql 数据导入到 MongoDB 中的需求&#xff0c;打算使用 Kettle 工具实现。本文章记录了数据导入从 0 到 1 的过程&#xff0c;最终实现了每秒钟快速导入约 …

增量同步_使用Kettle工具进行增量数据同步

增量同步的方式有很多种&#xff0c;我使用的是: 快照表 触发器需求&#xff1a;当主库库表发生增删改时&#xff0c;从库库表与主库库表数据保持一致。环境&#xff1a;1、Mysql2、kettle 7.1思路&#xff1a;1、在主库中&#xff0c;将需要同步的库表新建快照表&#xff0c;…

mysql in优化_MySQL的一次优化记录 (IN子查询和索引优化)

这两天实习项目遇到一个网页加载巨慢的问题(10多秒)&#xff0c;然后定位到是一个MySQL查询特别慢的语句引起的&#xff1a;SELECT *FROM (SELECT DISTINCT t.vc_date, t.c_bankno, t.vc_bankacco, t.vc_moneytype, t.en_totalbala, t.en_usablebala, t1.vc_nameinbank, date_f…

mysql sqlite转换_数据库转换工具(SqliteToMysql)

SqliteToMysql是一款用于SQLITE和MYSQL之间的数据库转换工具。它能够将SQLITE数据转换成MYSQL数据库&#xff0c;让用户自主配置转换条件&#xff0c;满足用户的数据库格式需要。。相关软件软件大小版本说明下载地址SqliteToMysql是一款用于SQLITE和MYSQL之间的数据库转换工具。…

mysql 查看集群状态_MySQL数据库集群正确配置步骤

类型&#xff1a;电子教程大小&#xff1a;8.5M语言&#xff1a;中文 评分&#xff1a;8.3标签&#xff1a;立即下载对MySQL数据库集群进行正确配置的实际操作步骤&#xff0c;以及对其概念的讲述&#xff0c;如果你对其相关的实际操作有兴趣了解的话&#xff0c;以下的文章将会…

oschina mysql limit_MySQL 用 limit 为什么会影响性能?

点击上方“武培轩”&#xff0c;选择“设为星标”技术文章第一时间送达&#xff01;一&#xff0c;前言首先说明一下MySQL的版本&#xff1a;mysql> select version();-----------| version() |-----------| 5.7.17 |-----------1 row in set (0.00 sec)表结构&#xff1a;m…