mysql分页偏移量,MySQL 分页查询优化思路

本文探讨了MySQL分页查询的优化策略,包括传统分页与流式分页的优缺点,强调了索引优化和缓存优化的重要性。建议避免使用select *,利用覆盖索引减少回表查询,并提倡使用hash缓存分页id列表以提高效率。此外,提出了反向排序优化末页查询速度的方法,以及避免使用offset的替代方案。

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

前言

突破查询瓶颈的方法有很多,但这里先不谈分库分表之流,当头问题就一个:单数据表分页查询过慢怎么办?

其实讲分页优化的博客真不少,但很多博主只顾分享点子忽略了细节,还有很多值得补充的地方。笔者回顾了曾经在千万级 BBS 项目的优化经历,尽可能结合实际地聊聊个人对分页查询的见解。也希望读者在亲身操作中验证,任何优化脱离了实际场景都是纸上谈兵。

分页方式

首先介绍最常见的数据分页方式,即传统分页和流式分页。

传统分页

7252b3014c9538bbe2d652a979a309eb.png

传统分页的基本逻辑是每页展示固定的条目数、通过页码分页和翻页,包含要素如下:

首页:按序查询出一页长度的数据,作为顶部数据,无须处理偏移量。

下一页:除了末页都有下一页。通过页数能确定当前数据的偏移量,和数据总数比较可以判断是否还有下一页。偏移量可用于获取下一页的信息。

上一页:除了首页都有上一页。其余同上。

跳转:同上,偏移量来判断是否支持跳转到该页。

总页数:只要记住数据总量,除一下就能得到页数。结合跳转功能使用。

末页:许多系统会支持跳转到最后一页,根据总页数或总量即可实现。

翻页和跳转功能为查询效率带来了极大挑战,一方面带着偏移量的 MySQL 查询效率不高,另一方面功能上也存在缺陷,例如浏览当前页面的过程中发生数据新增或删除,页码编号已经重置,此时翻页后会出现数据“重复”或“缺失”的问题。

流式分页

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值