Mysql:分页查询优化

分页查询优化

最简单的select分页是这样的:

select * from user limit 2000,10

mysql实际上会默认 order by id asc,然后再进行limit。这个有个问题是先对user表的所有数据排好序了再进行limit,其他页的数据不是自己想要的但也排序浪费时间

因此可以改写成下面:

select * from user where id > 2000 limit 10

此方式,是利用了id自增的方式,过滤了前2000条数据,然后直接取10条数据,但有很大的局限性:

  1. id必须是数字自增
  2. 业务上要求是对id(创建时间)为升序

因此可以再改下:

select *
from user u
inner join (select id from user order by id limit 2000,10) u1 on u.id = u1.id

此方式是利用上了id的索引,提升需要数据的查询速度。 弥补了上种方式的两个局限性,id不需要自增,排序字段是可以任意的,只要加索引就行。

局限性:

  1. 就是得自己手写分页SQL,平时分页都是借助分页工具。分页工具都是查完全部数据后再进行limit的
posted @ 2023-01-17 11:38  爱编程DE文兄  阅读(168)  评论(0编辑  收藏  举报