分享好友 最新动态首页 最新动态分类 切换频道
PageHelper 分页原理及大数据量查询性能问题的解决办法
2024-11-07 22:34

PageHelper.startPage(1,3)

 

开始执行真正的select语句

PageHelper 分页原理及大数据量查询性能问题的解决办法

public Page doSelectPage(ISelect select) { select.doSelect(); return this; }

进入MapperProxy类执行invoke方法获取到方法名称及参数值

 

接着是MapperMethod方法执行execute语句,判断是增、删、改、查。判断返回值是多个,进入executeForMany方法

 

这个方法开始调用SqlSessionTemplate、DefaultSqlSession等类获取到Mapper.xml文件的SQL语句

 

开始进入PageHelper的真正实现,Plugin通过实现InvocationHandler进行动态代理获取到相关信息

 

PageInterceptor 实现Mybatis的Interceptor 接口,进行拦截

 

转到ExecutorUtil抽象类的pageQuery方法

 

在抽象类AbstractHelperDialect的getPageSql获取到对应的Page对象

 

进入到MySqlDialect类的getPageSql方法进行SQL封装,根据page对象信息增加Limit。分页的信息就是这么拼装起来的

 

将最后拼装好的SQL返回给DefaultSqlSession执行查询并返回

 

PageHelper的分页功能是通过Limit拼接SQL实现的。

问题来了 分析SQL语句,limit在数据量少或者页数比较靠前的时候查询效率是比较高的。(单表数据量百万进行测试)

select * from user where age = 10 limit 1,10;结果显示0.43s

当where条件后的结果集较大并且页数达到一个量级整个SQL的查询效率就十分低下(哪怕where的条件加上了索引也不行)。

select * from user where age = 10 limit 100000,10;结果显示4.73s

那有什么解决方案呢

分页的方案 原来的分页SQL

select * from 表名 limilt 155555,20 1 优化后的sql语句

select * FROM 表名 WHERe ‘id’ in (select id from 表名 LIMIT 155555,20)

首先开启 PageHelper.startPage(pageParam.getPageNum(), pageParam.getPageSize()); 必然会在sql的后面追加 155555,20 而我们的优化后的SQL的limit是一个子查询语句如何解决?,此时仍然按照以前的做法会得到

SELECt * FROM 表名 WHERe ‘id’ in (select id from 表名 ) LIMIT 155555,20

 

Mapper文件

最新文章
AIGC重塑文旅行业新场景、新业态、新消费
(来源:中陆必得旅游规划)编者按AIGC(人工智能生成内容)在文旅产业中发挥着越来越重要的作用。通过深度学习、自然语言处理和计算机视觉等技术,AIGC能够自动化地分析和理解大量数据,从而生成丰富多样的内容。这不仅提高了内容创作的效
AI代码生成器——Cody
Cody由Sourcegraph开发,是一款人工智能驱动的编码助手,它不仅仅是一个简单的代码完成工具,更是一项功能强大且富有创新精神的工具。其主要优势在于能够深度理解代码编写的上下文,为开发人员提供准确、有意义的建议和评论。 Cody能够利用
会议OA项目之会议审批(亮点功能:将审批人签名转换为电子手写签名图片)
Java实现支持人脸识别的会议签到系统,方便参会人员高效签到,提高会议签到的安全性。采用深度学习进行模型训练以提高识别准确率,需要设计并优化相关的人脸识别算法。基本功能​ 1、支持基本的会议管理功能,包括会议申请、开始会议、会议
用AI绘画,让创意从未如此简单!搜狐简单AI带你开启智能创作之旅
在这个信息化高速发展的时代,创意和效率是任何行业中立足的关键。然而,对于许多人来说,面对日益增多的工作任务,如何高效且富有创意地完成工作成为了不小的挑战。想象这样一个情境:小李,一位营销专员,正在为即将到来的产品发布会寻找
WordPress 发布文章,出现发布失败与更新失败的解决办法
新版的Wordpress出来后,用新版的覆盖了之前老板的文件之后,出现了无法发布文章,更新老文章失败等错误提示。 这是什么原因呢?我通过网络查询,收集了以下原因和解决方法。1.古腾堡编辑器出错 这种情况非
影视建站遇到的坑与修复过程 苹果cms+海螺模板
主题设置后台 安装PHP扩展 后台快捷菜单配置添加 海螺主题设置,/admin.php/admin/conch/theme免费解析网:http://api.momimi.cn/?url=站长交流群:707031200海螺模板完美修复版2020.01.04带模板独立后台管理系统的多功能模板。使用此模板务
空间、算力、数据、场景“模力福地”重磅礼包发布!深圳福田打造人工智能产业高地!
12月11日,“模力福地”行动方案发布会暨人工智能先锋城市核心区高质量推进大会在深业上城城市云客厅举行。深圳市人工智能产业办、重点人工智能企业精英和深港两地专家,共同见证福田区在人工智能领域的重要举措与创新布局。“模力福地,智
扒一扒大模型应用隐形冠军:服务1600 企业、200 业务场景,分分钟就可构建专属应用
白小交 发自 凹非寺量子位 | 公众号 QbitAI服务1600+企业、200+业务场景直接落地。这位大模型应用的隐形冠军不藏了。他们打造大模型应用开发平台,客户能够开箱即用。服务企业覆盖央国企、金融、政务、民生、制造、零售等领域。就在今天,
网站站长角色深度解析:他们是如何驾驭互联网的?
网站站长角色深度解析:如何驾驭互联网? 随着互联网技术的迅猛发展和普及,站长这一职业角色也逐渐成为了互联网生态中不可或缺的一环。他们如何驾驭互联网?今天我们就来深度解析网站站长的角色及其工作内涵。网站站长,顾名思义,即负责
深圳SEO秘籍,关键词优化攻略,助力企业网站排名飞升!
深圳快速SEO,专注关键词优化,助力企业网站快速提升排名。本文揭秘高效策略,助您优化关键词,实现网站流量激增。随着互联网的飞速发展,企业对的需求日益增长,在这个竞争激烈的市场环境中,如何让企业网站在搜索引擎中脱颖而出,成为众
相关文章
推荐文章
发表评论
0评