背景: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

最新文章

  1. libevent源码分析:http-server例子
  2. Android视频播放之VideoView
  3. GCD时间轴
  4. delphi 当月的第一天, 当月的最后一天
  5. EntityFramework-DBFirst-重新生成后写的验证消失(解决办法)
  6. asp.net 两个页面之前传递数据
  7. ASP.NET MVC的跳转攻击问题
  8. postgreSQL可视化工具pgAdmin3 导入表结构和数据
  9. C#版 - Leetcode 13. 罗马数字转整数 - 题解
  10. Gradle入门与使用
  11. 【HDU - 1429】胜利大逃亡(续) (高级搜索)【状态压缩+BFS】
  12. BZOJ1423 : Optimus Prime
  13. mysql 快速拷贝表
  14. Linux编辑启动停止重启springboot jar包脚本
  15. JLINK与JTAG的区别(转)
  16. elementUI和iview兼容么
  17. Netty学习第六节实例一步学习
  18. java 中 enum 枚举的使用
  19. shell 指令分析nginx 日志qps
  20. RSA算法工具

热门文章

  1. ActiveMQ(四) 转
  2. Makefile:1: *** 多个目标匹配。 停止。
  3. 从.Net版本演变看String和StringBuilder性能之争
  4. putty software caused connection abort
  5. BAPI_PO_CEATE 与PO_1
  6. javascript:;用法集锦
  7. EOS智能合约为何选择Web Assembly(wasm)
  8. GDUT 积木积水 2*n 时间复杂度
  9. codeforces 691A A. Fashion in Berland(水题)
  10. CollectionView垂直缩放卡片布局