首页 » 技术资讯 » 软件项目列表页分页技巧和优化(分页数据优化项目功能)「分页如何优化」

软件项目列表页分页技巧和优化(分页数据优化项目功能)「分页如何优化」

admin 2024-07-23 21:48:43 技术资讯 0

扫一扫用手机浏览

文章目录 [+]

01

活用 max() min()

软件项目列表页分页技巧和优化(分页数据优化项目功能) 软件项目列表页分页技巧和优化(分页数据优化项目功能) 技术资讯
(图片来自网络侵删)

软件项目实战中,不可避免的都会碰到分页功能。
那么实际分页功能实现中,有哪些我们可以讨巧的操作么?灵活使用min(),max()就能比较健壮的实现分页功能。

分页功能中,一般都需要2个参数,一个 pageNo,代表请求的某个页面的页数。
一个countNo,代表一个具体某一个页面中,返回的数据条数。

软件项目列表页分页技巧和优化(分页数据优化项目功能) 软件项目列表页分页技巧和优化(分页数据优化项目功能) 技术资讯
(图片来自网络侵删)

为通用,稳健考虑,countNo会有允许请求最大值,其他可以让调用方灵活处理。
为什么要设定一个页面的最大值呢?肯定是本着请求效率高效原则考虑。

现如今,http服务的耗时都主要消耗在2个方面:mysql,网络。
如果接口让调用方任意传参调用的话,可以试试,countNo传递一个巨大的数字,比如100000。
可以测试看看查询效率,看看mysql请求时长。

$countNo = min($countNo,20);

这一行代码,就很方便的解决掉,调用方传递大值的场景。

同样的,pageNo,默认会需要指定最小页面数据,不能别人不传递pageNo,就不展示出来数据的。

$pageNo = max($pageNo,1); //假设分页从第一页开始。

另外,入参校验逻辑,不在本篇讨论。

02

LIMIT 优化

分页功能必然涉及到mysql limit。
那么大数据量下的 limit 优化就必然要有所考虑。

id连续场景:

假如,id是连续的。
那么可以使用 between 语法来实现。
如果,id不连续,那就有问题,取不到所要数目的数据。
我们通过explain来观察两个语句的区别:

rows由之前的500020行,缩减到21行。
优化效果相当明显。

当然,现实场景中,由于各种原因,id基本上大概率存在不连续情况的。
那么这个时候就需要另一种方法。

分页下标:

第二种方法,就是,在分页过程中,记录下上次的分页下标。

我们来看看,采取下标的explain分析结果

对比来看没有采用下标的,从rows来看,效果很明显。

那么这句

select id,num from table order by id asc limit 500000,20

的执行逻辑是什么呢?往下看:

从数据表中读取第N条数据添加到数据集中。
重复第一步直到 N = 500000 + 20。
根据 offset 抛弃前面 500000 条数。
返回剩余的 20 条数据。

这个第二步骤,第三步骤问题比较大,找出500000+20数据,然后又抛弃掉500000条数据,做了很大无用功。

最重要,技术优化永无止境。
有时候需要业务增加一小丢丢策略,那么也就不会存在什么其他问题的。

比如,搜索引擎展示数据就最大展示到100页,最大offset也就是 10010。
当然,搜索引擎不是简单的mysql,如果在mysql上面,limit 1000,10也不会有其他太多问题的。

不知道这算不算大家所说的降维打击。
o( ̄︶ ̄)o

标签:

相关文章