[MySQL] LIMIT 分页优化
2024-08-27 22:45:48
背景:LIMIT 0,20 这种分页方式,随着 offset 值的不断增大,当达到百万级时,一条查询就需要1秒以上,这时可以借助索引条件的查询来优化。
SQL:select * from member where status = 1 limit 0,20; 改写 select * from member where id >= 1 and status = 1 limit 20;
代码片段:
/**
* limit 分页优化
* @author ercom
*/
$startTime = time();
$condition = [
['status', '=', 1],
['platform', '=', 1],
]; $count = Member::query()
->where($condition)
->count('id'); $pageSize = 20;
$pageNum = ceil($count / $pageSize); $startMemberId = 1;
for ($i = 1; $i <= $pageNum; $i++) {
$condition = [
['id', '>=', $startMemberId],
['status', '=', 1],
['platform', '=', 1],
]; $results = Member::query()
->where($condition)
->orderBy('id', 'asc')
->limit($pageSize)
->get(); if ($results->isNotEmpty()) {
$memberArr = $results->toArray(); dispatch(new TransferMemberJob($memberArr)); $startMemberId = max(array_column($memberArr, 'id')) + $pageSize;
} else {
$startMemberId = $startMemberId + $pageSize;
} $this->info(sprintf('page=%s, startMemberId=%s', $i, $startMemberId));
}
$endTime = time();
$seconds = $endTime - $startTime;
$hours = sprintf('%.2f', $seconds/3600);
$rps = sprintf('%.2f', $count/$seconds);
$qps = sprintf('%.2f', $pageNum/$seconds);
$this->info(sprintf('All finished, %s / %s, total %s rows, cost %s hours, %s rows/s, %s query/s', date('Y-m-d H:i:s', $startTime), date('Y-m-d H:i:s', $endTime), $count, $hours, $rps, $qps));
Link:https://www.cnblogs.com/farwish/p/10926820.html
最新文章
- libevent源码分析:http-server例子
- Android视频播放之VideoView
- GCD时间轴
- delphi 当月的第一天, 当月的最后一天
- EntityFramework-DBFirst-重新生成后写的验证消失(解决办法)
- asp.net 两个页面之前传递数据
- ASP.NET MVC的跳转攻击问题
- postgreSQL可视化工具pgAdmin3 导入表结构和数据
- C#版 - Leetcode 13. 罗马数字转整数 - 题解
- Gradle入门与使用
- 【HDU - 1429】胜利大逃亡(续) (高级搜索)【状态压缩+BFS】
- BZOJ1423 : Optimus Prime
- mysql 快速拷贝表
- Linux编辑启动停止重启springboot jar包脚本
- JLINK与JTAG的区别(转)
- elementUI和iview兼容么
- Netty学习第六节实例一步学习
- java 中 enum 枚举的使用
- shell 指令分析nginx 日志qps
- RSA算法工具
热门文章
- ActiveMQ(四) 转
- Makefile:1: *** 多个目标匹配。 停止。
- 从.Net版本演变看String和StringBuilder性能之争
- putty software caused connection abort
- BAPI_PO_CEATE 与PO_1
- javascript:;用法集锦
- EOS智能合约为何选择Web Assembly(wasm)
- GDUT 积木积水 2*n 时间复杂度
- codeforces 691A A. Fashion in Berland(水题)
- CollectionView垂直缩放卡片布局