关于多表分页业务逻辑处理

2023年 7月 18日 50.2k 0

前言

在平时我们写分页列表的时候,通常对于单表的分页,通过Mybatis分页插件结合Mysql的limit分页轻松完成单表的分页,但是也难免遇到多表的情况,多表需要对数据进行处理,合并、分组、排序、然后在进行分页查看,单纯的依靠分页插件和简单的limit的是无法实现的,也是相对于比较考验性能的一个接口,复杂的逻辑处理可能会对接口性能产生影响。

数据量大的情况下,对于分页性能的要求会更加高,如果分页查询不正确,会导致性能下降,严重直接会导致页面卡死,之前也是遇到过。

Mysql 单表分页

其实mysql的分页还是分很多种的,常见limit,还有子查询的方式进行limit、JOIN分页方式,这几种我都想大概说下,很多时候我可能对这种相对于简单的东西不太在乎,但是往往存在性能隐患。

limit

LIMIT * OFFSET *,用于返回select查询记录数,limit第一个参数来设定记录行的偏移量,也就是从第几行开始进行遍历拿数据,第二个参数来设定每次返回多少行数据,⚠️记录行的偏移量是从0开始的,不是1;
limit m,n ,一般m是page−1)∗page-1)*page−1)∗pagesize ,当前页-1乘以每页条数;

//返回 6-15行的数据 ,需要尽量减少m的值
SELECT * FROM table LIMIT 5,10;

//返回前5条数据,limit 5 = limit 0,5 
SELECT * FROM table LIMIT 5
//每次查询获取上一页的最大id,无需扫描之前的数据 ,需要尽量减少m的值
select * from table where id > max_id order by id limit n;

//join 分页 通过关联子查询进行分页
SELECT * FROM `table` AS t1
JOIN (SELECT id FROM `table` ORDER BY id desc LIMIT ".($page-1)*$pagesize.", 1) AS t2
WHERE t1.id

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论