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因为是主键索引,能够运用索引,速度影响不大,当然,你也可以根据实际情况,应用其他字段,只要能够用上索引就可以

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