mysql大数据量limit问题

今天遇到一个问题,千万级别的数据表,需要全部进行遍历,如果用limit offset,count的话,无疑在翻到一定页数,也就是offset到达一定的值之后,mysql的查询速度会变得非常的慢。

$offset=0;
$count = 5000;
do {
   $sql = 'select id,uid from test_table limit ' . $offset . ',' . $count;
   $res = $obj->query($sql);
   if (empty($res)) {
       break;
   }

   // 处理$res数据start
   // 处理$res数据end

   $offset += $count;

} while(true);

为了解决这个问题,运用了一种技术方案,即,保持count, 加上带索引的有序检索条件,如:

$count = 5000;
$id = 0;
do {
   $sql = 'select id,uid from test_table where id>' . $id . ' limit ' . $count . ' order by id asc';
   $res = $obj->query($sql);
   if (empty($res)) {
       break;
   }

   // 处理$res数据start
   // 处理$res数据end
   $id = $last_id; // $last_id中最后一条记录的id
} while(true);

通过这种方式,避免了offset过大的问题,且id因为是主键索引,能够运用索引,速度影响不大,当然,你也可以根据实际情况,应用其他字段,只要能够用上索引就可以

易享写作 - 专业在线小说创作工具

🚀 易享写作 - 专业在线小说创作工具

欢迎使用 易享写作 (MakeANovel) —— 一款专为小说创作者设计的在线平台。无论您是网文作家、文学爱好者还是故事创作者,这里都能提供您所需的强大工具。

  • 人物关系图生成器:可视化梳理复杂角色关系,创作更轻松。
  • 在线创作与保存:实时保存,多设备同步,灵感永不丢失。
  • 作品系统管理:清晰管理您的所有小说项目和章节。
  • 便捷分享与反馈:方便获取读者意见,助力作品完善。

0 评论
最新
最旧 最多投票
内联反馈
查看所有评论
滚动至顶部