优化limit分页(延迟关联)

本文探讨了MySQL分页查询中limit指令存在的效率问题,并提出了两种优化方案:一是通过延迟关联来减少查询开销;二是利用特定SQL语句提高查询速度。实测数据显示,这两种方法在面对大量数据时能显著提升查询性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

limit'分页有一个问题就是当偏移量较大时查询遍历的数据越多,效率会逐渐降低,例如limit 1000,10这样的查询这时MYSQL需要查询出1020条记录然后只返回最后20条,前面的1000条记录都会被抛弃,代价较高。如果每个分页被访问的数据频率都相同要优化这种查询要么是在页面中限制分页的数量要么是优化大偏移量的性能。


优化此类分页查询的最简单的一个办法就是尽可能的使用索引覆盖扫描,而不是查询所有的列。然后根据需要做一次关联操作再返回所需的列,对于偏移量很大的时候,这样做的效率会提升很大。以下面的查询作为示例,以主键info_id(主键)作为覆盖的索引

目前表的数据总量是90122条数据

接下来我们进行几个分页数据的测试与对比

一:首先是第五十条数据之后获取20条

普通用时0.007s


延迟关联用时0.003s



二:首先是第五十条数据之后获取5000条

普通用时0.046s


延迟关联用时0.007s

三:首先是第五十条数据之后获取50000条

普通用时1.131s

延迟关联用时:0.043s

还有另外一种方式select info_id,info_oldNO,info_title from  zb_projectinfo where info_id >(select info_id from  zb_projectinfo limit 50000,1 )limit 20这样的语句和延迟关联性能差距不大




还有另外一种方式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值