MySql分页及优化

使用PageInfo把list手动进行分页处理 在项目中经常会遇到对list列表进行分页处理,这时就不能使用PageInfo在查询数据库时分页,需要查询全部之后,进行手动分页。 从PageInfo的类中可以看出,PageInfo里面包含各个参数,各个参数的含义如下: //当前页 private int pageNum; //每页的数量 private int pageSize; //当前页的数量 private... 阅读详情

 

本文的核心内容:MySql的分页、封装分页对象【参数在应用中传递】、百万数据分页优化、PageHelper实现分页


 

一:MySql的分页操作

此语句的含义:从0=Index之后,查询5条数据。

适应场景: 适用于数据量较少的情况(元组百/千级)

原因/缺点: 全表扫描,速度会很慢. Limit限制的是从结果集的M位置处取出N条输出,其余抛弃.

 

二:封装分页对象:

I. 总条数(查询)

totalRow

II. 总页数(计算) totalRow % totalPage == 0 ? totalRow / totalPage : totalRow / totalPage + 1

totalPage

III. 单页显示条数(设定)

pageSize

IV. 访问的页码(获取)

pageIndex(每次请求+1 / -1)

PageUtil源代码:仅供参考

public class PageUtil {

	private Integer totalRow;
	private Integer pageIndex;
	private Integer pageSize;
	private Integer totalPage;
	
	//设置默认当前页与pageSize
	public PageUtil() {
		this(1,5);	
	}
	
	public PageUtil(Integer pageIndex, Integer pageSize) {
		super();
		this.pageIndex = pageIndex;
		this.pageSize = pageSize;
	}
	//设置总行数、计算总页数
	public void setTotalRow(Integer totalRow) {
		this.totalRow = totalRow;	
		Integer count=this.totalRow % this.pageSize ==0? this.totalRow/this.pageSize:this.totalRow/this.pageSize+1;
		this.setTotalPage(count);
	}
	public Integer getPageIndex() {
		return pageIndex;
	}
	public void setPageIndex(Integer pageIndex) {
		this.pageIndex = pageIndex;
	}
	
	public Integer getPageSize() {
		return pageSize;
	}
	public void setPageSize(Integer pageSize) {
		this.pageSize = pageSize;
	}
	
	public Integer getTotalPage() {
		return totalPage;
	}
	public void setTotalPage(Integer totalPage) {
		this.totalPage = totalPage;
	}
	//获得起始行
	public Integer getFirst(){
		return (this.pageIndex-1)*this.pageSize+1;
	}
	//获得最后一行
	public Integer getLast(){
		return this.pageIndex*this.pageSize;
	}
}

 

三:查询百万分页数据的优化【这部分源自网上博客,借鉴】

 

select XXX from table_A  limit 1000000,100;

【13秒左右】

上面的语句是取1000000后面的100条记录,但是这样会导致mysql将1000000之前的所有数据全部扫描一次,大量浪费了时间。

 

优化方案:

(1)使用记录主键的方式进行优化【适用于ID自增的表】

     limit最大的问题在于要扫描前面不必要的数据,所以可以先对主键的条件做设定,然后记录住主键的位置再取行。

select * from table_A where main_id > 1000000  limit 100;

使用between关键字

select * from table_A where id between 1000001 and 1000100 limit 100;

 

(2)使用子查询进行查询

select * from table_A where main_id > (select main_id from table_A limit 1000000,1) limit 100;

 

四:PageHelper实现分页

引入Maven依赖

        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.2.10</version>
        </dependency>

实现分页操作 

    @Override
    public PageResult<Map<String, Object>> pageList(EvaMonitor evaMonitor) {
        //设置pageIndex以及PageSize,执行回调查询,查询结果封装到PageInfo中。
        PageInfo<Map<String, Object>> pageInfo = PageHelper.startPage(evaMonitor.getPageIndex(), evaMonitor.getPageSize())
                .doSelectPageInfo(() -> {
                    evaMonitorDao.selectMonitorDetail(evaMonitor);
                });
        //返回分页数据结构即可
        return new PageResult().setTotal(pageInfo.getTotal()).setResult(pageInfo.getList());
    }

 

 

MySQL中深度分页问题的优化 MySQL中深度分页问题的优化在MySQL中,使用LIMIT子句进行分页查询时,可能会遇到一个常见的性能问题:当LIMIT子句中的偏移量X很大时,查询速度会显著下降。例如,LIMIT 0,10可能只需要20毫秒,而LIMIT 1000000,10可能需要15秒或更长时间。这个问题被称为深度分页问题。下面我们来深入探讨为什么... 阅读详情

相关推荐

人形机器人_双足行走动力学:基于OpenSim平台的股骨模型与建模

摘要 本文系统解析了股骨模型的生物力学特性、建模方法及应用场景,并探讨了基于OpenSim平台的股骨与42块肌肉Hill-type建模的技术流程。股骨作为人体核心承重骨骼,其几何结构、力学性能及多尺度建模方法在医学仿真、假体设计和仿生机器人领域具有重要价值。OpenSim通过逆向动力学、肌肉力优化及多物理场耦合,为临床步态分析、手术规划及仿生系统开发提供量化工具。同时对比了Hill-type模型与其他肌肉模型的优劣,并展望AI驱动建模、智能材料集成等前沿方向。未来研究将聚焦个性化仿真、实时计算优化及生物-机

一枚农夫,闲来有事聊聊天,交个朋友,让沉闷的生活畅想下 1582

PageInfo 分页优化

PageInfo 分页优化 mybatis PageInfo分页插件在当前项目开发中被广泛使用,但是随着数据量的增多以及业务的复杂性,PageInfo分页的效率会大大降低.其中原因是因为每次请求分页的数据都会先请求count.这样的话我们就会花费2T+的时间,上述的情况下对于用户体验是极差的. 优化方向 1.只做一次count查询 startPage(int pageNum, int page...

壮哥哥 1544

【SLAM】探索explore_lite在移动机器人自主建图中的高效边界检测策略

本文深入解析了explore_lite在移动机器人自主建图中的应用,重点探讨了其高效的贪婪边界检测策略。该工具包专为资源受限平台设计,通过直接利用SLAM生成的地图信息,以极低的计算开销实现快速、稳定的未知区域探索,并与move_base导航框架无缝协作,是轻量级机器人自主探索的优选方案。

purple的博客 1067

分页插件PageHelper的使用及优化

介绍 PageHelper是mybatis框架上的一款分页插件。通过它友好的api设计,可省去写count,分页sql嵌套的繁琐工作。同时插件内部兼容不同数据库间(mysql、Oracle等)的分页实现。开发者只需关注具体业务sql,其他的统计封装交给PageHelper插件动态处理。 作为java后端开发者,这是一款必不可少的基础组件,大大减少了手动写分页列表查询的工作量。 官方开源地址: GitHub - pagehelper/Mybatis-PageHelper: Mybatis通用分页插件

leeta的博客 7916

告别编译报错!手把手教你用VS2022命令行编译curl静态库(附完整测试代码)

本文详细介绍了如何在VS2022环境下通过命令行编译curl静态库,从环境准备、编译实战到项目集成,提供了完整的避坑指南和测试代码。特别针对常见的编译报错如LNK2019等给出了具体解决方案,帮助开发者高效完成网络库的静态编译与集成。

weixin_42557803的博客 448

AWD线下攻防赛总结

在本地组策略编辑器里面,依次展开计算机配置—>管理模板—>Windows组件—>远程桌面服务—>远程桌面会话主机—>连接—>限制连接的数量。8.Web目录环境查找相关可疑文件:jpg/png/rar,属性、解压。进程线程:netstat / ps -aux/netstat -apt。4.查看/etc/init.d/rc.local中启动服务有无异常。1.不使用默认口令,修改成复杂的,并确保和web环境连接。5.使用脚本开启进程监控、目录监控、流量监控。文件操作监控.exe/御剑文件监控.exe。

XuJL89的博客 631

记录一次分页优化

oracle+mybatis+pageHelper分页优化。

u010185947的专栏 540

Qi标准无线充学习笔记

负载调制主要通过接收端向后散射调制计数使得功率信号改变,两者通过线圈的电压和电流的变化量来传输信号。下面是要求稳定电流的变化量不得超出8ma,判断稳定的时间至少要在150us稳定电压的变化量不得超出110mv,判断稳定的时间至少要在150us高低电流变化量至少需要15mA,判断稳定的时间至少要在100us,主线圈电流采样的时间是在半桥转换的1/4周期刻测量的高低电压变化量至少需要200mV,判断稳定的时间至少要在100us。

m0_73991989的博客 1012

PageInfo实现快速分页查询

1.web.xml导入配置信息 <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>4.1.0</version> </dependency> <!-- spring boot可以直接用这个...

weixin_42187447的博客 1万+

第七篇:A133 Android 10 触摸提示音过大

描述: 开启触摸提示音功能之后,客户反馈触摸提示音过大,需要改小。 解决方案: 看代码注释,在framework下搜索方法即可。 /** @see AudioManager#playSoundEffect(int) */ public void playSoundEffect(int effectType) { playSoundEffectVolume(effectType, -1.0f); } /** @see AudioManager#playSoundEff

qq_33088619的博客 1697

YOLOv13改进策略【Neck】| CVPR2024 LGAG:大核分组注意力门模块,3×3分组卷积与注意力协同的特征精准融合

本文记录的是利用LGAG 模块改进 YOLOv13 的颈部融合部分。(Large-kernel Grouped Attention Gate)通过3×3分组卷积与注意力机制结合,引导解码器处理特征与跳接特征的精准融合。本文利用模块,通过3×3分组卷积扩大感受野以捕捉更广泛局部空间上下文,同时结合注意力机制生成自适应注意力系数,对YOLOv13中关键目标特征赋予高激活值、抑制冗余背景特征,在特征融合阶段实现全局语义与局部细节的高效结合,减少计算成本的同时提升特征表达能力,增强模型对复杂场景下目标的检测精度与效

Limiiiing的博客 106

MySQL深度分页优化

Mysql深度分页优化 1. 背景 mysql使用select * from table limit offset, rows分页在深度分页的情况下, 性能急剧下降。 例如:select * 的情况下直接⽤limit 600000,10 扫描的是约60万条数据,并且是需要回表 60W次,也就是说⼤部分性能都耗在随机访问上,到头来只⽤到10条数据(总共取600010条数据只留10条记录) 2. 优化 2.1 业务层面限制跨度比较大的跳页 百度和Google方案: [外链图片转存失败,源站可能有防盗链机制,

JavaMa的博客 7067

DISK配置服务器软RAID工作任务(RAID1+BITLOCKER)-winserver4

DISK配置服务器软RAID工作任务(RAID1+BITLOCKER)-winserver4

新时代先锋的博客 7299

mysql的分页优化_MySQL的分页优化

今天下午,帮同事重写了一个MySQL SQL语句,该SQL语句涉及两张表,其中一张表是字典表(需返回一个字段),另一张表是业务表(本身就有150个字段,需全部返回),当然,字段的个数是否合理在这里不予评价。平时,返回的数据大概5w左右,系统尚能收到数据。但12月31日那天,数据量大概20w,导致SQL执行时间过长,未能在规定的时间内反馈结果,于是系统直接报错。一般的思路是用MySQL的分页功能,即...

weixin_31499265的博客 309

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

MySQL性能调优与深度分页优化策略

在现代的Web应用和大数据环境中,MySQL作为一款广泛使用的开源关系数据库管理系统,其性能直接影响着应用程序的响应时间和用户体验。尤其是在面对海量数据的深度分页查询时,性能问题尤为突出。本文旨在探讨MySQL的性能调优策略以及深度分页查询的优化方法。MySQL性能调优是一个复杂的过程,涉及到数据库配置、查询优化、系统资源管理等多个方面。而深度分页查询的优化则需要结合具体的应用场景和数据特性,采用灵活的策略来实现高效的数据检索。通过上述的优化措施,可以显著提升MySQL在高并发和大数据环境下的表现。

小码农的博客 3857

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

mysql深度分页优化方案

深度分页的优化核心在于减少MySQL扫描的数据量,避免全表扫描。通过使用索引、游标分页、延迟关联等技术,可以显著提升分页查询的性能。根据具体的业务场景选择合适的优化方案。延迟关联通过先获取主键,再关联查询实际数据的方式,减少了回表次数和I/O操作,特别适合深度分页场景。通过合理设计索引和查询语句,可以显著提升MySQL分页查询的性能。

C18298182575的博客 1911

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

MySQL分页的优化

MySQL自带的分页 LIMIT [offset,] rows 语法依据 对于MySQL自带分页方式的优化 --- 测试数据表结构 CREATE TABLE `sc` ( `sc_id` int(11) NOT NULL AUTO_INCREMENT, `s_id` int(11) NOT NULL, `c_id` int(11) NOT NULL, `score` int(1...

wujizhishui的博客 326

MySQL的深度分页如何优化?

MySQL的深度分页如何优化?

java1234的博客 982

MySQL的深度分页如何优化?

MySQL的深度分页如何优化?

java1234的博客 912

MySQL深分页如何优化?

深度分页问题是 MySQL 分页查询中的一个常见难题,但通过合理的优化策略,我们可以有效提升查询效率。索引优化:确保排序和过滤的列上有索引。覆盖索引:减少回表操作,直接从索引中获取数据。标记分页:避免使用OFFSET,通过WHERE子句获取下一页数据。分区表:将大表分成多个分区,减少查询扫描的数据量。缓存结果:缓存分页查询结果,减少数据库负载。使用外部搜索引擎:在复杂场景下,使用 Elasticsearch 或 Solr 等工具。最后分享一份大彬精心整理的大厂面试手册,包含。

weixin_66137383的博客 978

Mysql的分页优化

一、问题的引出 当MySQL表中有数据量很大的时候如何做分页? 很多应用往往只展示最新或最热门的几条记录,但为了旧记录仍然可访问,所以就需要个分页的导航栏。然而,如何通过MySQL更好的实现分页,始终是比较令人头疼的问题。虽然没有拿来就能用的解决办法,但了解数据库的底层或多或少有助于优化分页查询。 我们先从一个常用但性能很差的查询来看一看。 SELECT * FROM city ORDER

想作会飞的鱼的博客 461

mysql 分页优化_Mysql 查询分页优化

全表扫描,速度极慢limit 语句的查询时间与起始记录的位置成正比MySQL 的 limit 语句是很方便,但是对记录很多的表并不适合直接使用创建测试表:DROP TABLE IF EXISTS `t_user`;CREATE TABLE `test`.`t_user`(`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,`username` VARCHAR...

weixin_42388631的博客 143

MySQL 深度分页优化:从原理到实践

MySQL 深度分页优化是一个综合性的问题,需要从数据库层面、代码层面以及业务层面多管齐下。通过减少回表、游标分页、借助其他技术以及业务限制等方法,可以有效提升深度分页的性能,为用户提供更流畅的体验。在实际开发中,要根据项目的具体情况选择合适的优化方案,确保系统的高效稳定运行。希望本文的内容能帮助大家在 Java 开发中更好地应对 MySQL 深度分页问题,记得关注我,获取更多实用干货知识。

m0_57836225的博客 1424

MySQL的深度分页如何优化!

适用于大多数场景,对应用层改动较小,效果显著。关键是创建正确的覆盖索引。性能最优,无OFFSET瓶颈。需要应用层配合存储游标。将计算压力转移到后台。减少单次扫描范围。是否真的需要深度随机跳页?优化产品设计往往是性价比最高的方案。使用EXPLAIN分析查询执行计划,确认是否使用了预期的索引。选择哪种方案取决于你的具体数据量、访问模式、排序需求、实时性要求以及对应用层改动的接受程度。通常延迟关联和游标分页是解决深度分页性能问题最直接有效的武器💪。

群群的博客 1139

Mysql 深度分页查询优化

在 MySQL 中,分页是一个常见的功能,mysql在数据量大的时候,深度分页数据偏移量会增大,导致查询效率越来越低

喵小狸的博客 1186
上一篇: 初识Redis
下一篇: Redis的高级特性
Sugar_maps
博客等级 码龄11年 49粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值