分享好友 最新动态首页 最新动态分类 切换频道
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文件

最新文章
Python开发QQ聊天机器人——Yes酱的部署与调教
Yes酱是一个会发s图的群管理机器人,基于 go-cqhttp,使用OneBot标准的插件开发的一个机器人,支持以下功能:发送setu/猫猫图返回一张涩图/猫猫图检测关键字禁言私聊调教对话本文主要参考了其官方博客,结合Yes酱的github和go-cqhttp的gith
2024 (图文)Yoast SEO插件使用教程,详细设置步骤
  Yoast SEO是著排名第一的。插件有Yoast SEO(免费)和Yoast SEO Premium(付费)有两个版本  Yoast SEO可以完美地在所有类型的网站或上实现SEO相关的设置。可帮助您编写更好的且经过优化的内容让搜索引擎收录。该插件的免费版本还具
EyouCms(易优企业建站系统) 官网版 v3.5.6
EyouCms(易优企业建站系统)官方版是一款十分受欢迎的企业内容管理软件。EyouCms(易优企业建站系统)最新版支持文章的「发布、删除、移动、复制、排序、推荐、置顶、隐藏、显示」操作。EyouCms(易优企业建站系统)官方版支持设置每篇文章的「
【技术】全站仪测量使用方法及坐标计算,一步一步讲解!
全站仪常规注意事项:在使用本仪器之前, 要把各种注意事项烂熟于心,务必检查并确认该仪器各项功能运行正常。1、不要将仪器直接对准太阳将仪器直接对准太阳会严重伤害眼睛。若仪器的物镜直接对准太阳, 也会损坏仪器。2、将仪器架设到脚架
宅家新姿势—威联通NAS安装套件版Emby搭建家庭影音服务器
创作立场声明:最近一直在折腾威联通的NAS,也折腾出了一些小心得,网上关于威联通系统的相关教程较少,所以新的一年,准备开一个新系列,写写威联通系统的介绍、配置技巧等,是分享也是记录。在阿文菌等各位大佬的影响下开始研究Emby这款
【原创】解锁社交媒体SEO:获取海量流量的密钥
  在当今数字化时代,社交媒体已成为人们日常生活的重要组成部分,同时也是企业和个人获取流量、提高品牌知名度的重要渠道。社交媒体SEO(搜索引擎优化)作为一种优化社交媒体平台的方法,旨在提高网站在搜索引擎和社交媒体上的排名和流量
AI文案创作神器:让你的营销更有感染力
在快节奏的互联网时代,营销信息的传递速度超乎想象,但要让你的内容在众多信息中脱颖而出,并非易事。一篇优秀的营销文案不仅仅要传达产品信息,更要打动人心,引发共鸣。而今,AI技术的崛起为文案创作注入了新的活力,句无忧——这款集违
如何有效利用百度购买关键词排名提升网站流量
青衣网络-www.ra0.cn:如何有效利用百度购买关键词排名提升网站流量目录:1. 理解百度关键词购买机制2. 确定目标关键词的策略3. 关键词竞价与优化技巧4. 监控和调整关键词表现5. 避免常见错误和陷阱6. 结语正文:理解百度关键词购买机制在
经验:百度收录规则与机制:运营专家分享亲身经历,提升收录率的秘诀
随着信息化时代的飞速发展,百度收录成为了每一位内容创作者难以避免的难题。本人身为一名具有丰富经验的运营专家,深谙百度收录规则与机制。今日在此,愿将亲身经历与众共享,期盼能为同业者带来有益的启示。百度收录的意义与现状首先要明
相关文章
推荐文章
发表评论
0评