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条数据,但有很大的局限性:
- id必须是数字自增
- 业务上要求是对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不需要自增,排序字段是可以任意的,只要加索引就行。
局限性:
- 就是得自己手写分页SQL,平时分页都是借助分页工具。分页工具都是查完全部数据后再进行limit的
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!