分页优化

优化分页limit

通常我们在分页的时候,通常使用的是limit 50, 10这种语句。数据少还不错,但是当数据偏移量非常大的时候,性能就会出现问题,例如select xx,xxx from test_table limit 100000020, 20。扫描了100000020条数据,才返回20条数据。

这个时候我们可以用一下两种方式来优化:

  • 利用between and和主键索引
    利用主键自增id,我们如果知道了分页的上边界,以上查询可以改写为:
select xxx, xxx from test_table where id between xxxxx and xxxx。
  • 利用自增主键索引、order by加limit,不使用offset
    limit和offset的问题,其实就是offset的问题,它会导致MySQL扫描大量不需要的行然后再抛弃掉。如果使用某个标签记录上一次所取数据的位置,那么下次就可以直接从书签位置开始扫描,这样就可以避免使用offset。
    例如以上查询可以改为:
第一组数据:``select xxx, xxxx from test_table order by id desc limit 20;
这样就拿到了本次数据和下次数据的分解id值,则下一页查询就知道可以:
select xxx, xxx from test_table where id < '上页id分界值' order by id desc limit 20

(完)

发表评论

邮箱地址不会被公开。 必填项已用*标注