MySQL分组分页优化_mysql分页优化

本文介绍了几种优化SQL分页查询的方法,包括使用延迟关联、between and子句以及优化offset等,对比了不同方法的性能差异。

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

一般分页这样写

select * from goods limit 50,20

从50行开始取20行,即第51行到70行

当数据量少当时候这样并没有什么问题,但是如果

select * from goods limit 1000000,20

查询耗时骤升。

这种方式是查询出1000000+20行,再取20行,前面1000000行丢弃。

如何优化?

1.延迟关联

select * from goods inner join (select id from goods order by id limit 1000000,20) as lim using(id)

这里使用了覆盖索引

覆盖索引:如果一个索引包含(或者说覆盖)所有需要查询字段的值,称之为“覆盖索引”

2.使用between and

select * from goods where id between 1000000 and 1000020 order by id

3.优化offset

limit offset 的问题其实是offset的问题,可以根据上次记录的位置开始扫描,避免使用offset

select * from goods where id<1000020 order by id desc limit 20

这种方法好处是无论翻多少页,性能都很好。

性能比较

优化offset >= between and > 延迟关联 > limit offset

延迟关联(2-3倍)于limit offset。

优化offset , between and(多倍)于limit offset,如果使用了索引将近100倍。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值