【高频面试题】深分页问题

什么是深分页

limit 100000,10 含义:去掉前面 10 万条,取后面 10 条,就是深分页。

语法:limit offset, rows

  • offset = 要跳过多少行
  • rows = 最终返回多少行

limit 100000,10:

先读 100000 + 10 = 100010 条数据,前面 10 万条直接扔掉,只把最后 10 条返回给你。

为什么慢

MySQL 不是直接跳到第 10 万行。 它会先查出前 100010 条,丢掉前面 10 万条,只返回最后 10 条。 要扫描大量数据,大量回表,IO 很高,越往后越慢。

优化方案(两个常用)

  1. 主键 id 分页(推荐,又叫书签分页)
sql 复制代码
select * from order where id > 100000 limit 10;

记住上一页最大 id,下一页直接从这个 id 往后查,不用扫描前面数据。 前提:主键连续有序。

  1. 先查 id,再 join 拿数据
sql 复制代码
select * from order t1 inner join (select id from order limit 100000,10) t2 on t1.id=t2.id;

子查询只扫描主键索引(不走回表),拿到 id 再查完整数据,减少回表开销。

缺点 & 注意

  • 主键分页不支持跳页(不能直接跳到第 5000 页),适合下拉滚动加载。
  • 如果业务需要任意页码跳转,深分页很难优化,一般业务上限制最大页码,不让用户查很深的页。
相关推荐
catoop1 小时前
API Key 设计与安全生成方案:结构拆解、数据库设计与 Java 实现
java·数据库·安全
Web极客码1 小时前
我用 Claude 分析 Redis 哨兵日志,实现跨机房数据不一致自动对齐
数据库·redis·php
库库的数据库笔记2 小时前
国产信创数据库的MySQL兼容性深度对比解析
大数据·数据库·mysql·oceanbase·政务
姚远Oracle ACE2 小时前
为什么无法连接到 PostgreSQL?
数据库·postgresql
ss2732 小时前
AI时代首先数据库-PostgreSQL实战笔记 | 22 PostgreSQL实例与集群
数据库·笔记·postgresql
ss2732 小时前
AI时代首先数据库-PostgreSQL实战笔记 | 21 PostgreSQL进程与内存架构介绍
数据库·笔记·postgresql
Henry-SAP4 小时前
SAP PP模块全景概览
数据库
喜欢吃豆4 小时前
Better Auth 深度解析:从用户认证到企业级身份基础设施
数据库·架构·权限·多租户
其实防守也摸鱼5 小时前
Cylab在线靶场——CTF中的通用技能
linux·数据库·学习·算法·靶场·ctf·学习网络安全