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

什么是深分页

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 页),适合下拉滚动加载。
  • 如果业务需要任意页码跳转,深分页很难优化,一般业务上限制最大页码,不让用户查很深的页。
相关推荐
白帽攻防录8 小时前
SRC 挖洞:Roundcube 预认证 SQL 注入深度复盘,CVE-2026-48842 preg_replace 转义绕过怎么打穿邮件系统
网络·数据库·sql·网络安全·sql注入
꯭自꯭闭꯭9 小时前
达梦SQL优化相关
linux·运维·数据库·sql
nhdh9 小时前
B+树揭秘:MySQL索引核心原理全解析
数据结构·b树·mysql
对空六课9 小时前
支持注意力分析的热力图工具有哪些?
前端·数据库·数据分析
南京码讯光电技术有限公司9 小时前
How to Design an Antenna System for an Industrial WiFi Module
数据库·人工智能
lusklusklusk10 小时前
Oracle数据库基础之2_体系结构
数据库·oracle
可乐ea11 小时前
从第一性原理构建 AI Agent:提示词、工具、技能与记忆全解剖
数据库·人工智能·工具调用·ai智能体·提示词工程·agent开发·智能体记忆
余槐i11 小时前
MySQL 深分页从 4 秒到 60 毫秒:延迟关联减少回表的实测与代价
mysql·性能优化·sql优化·执行计划·慢查询优化
东方护航数据恢复(深圳)11 小时前
医疗案例:HIS/PACS 数据库页损坏修复,医院不停诊完成恢复【东方护航数据恢复深圳店】
数据库·数据恢复·医疗·二次开盘
lusklusklusk12 小时前
Oracle数据库基础之11_Duplicate和Dataguard和RAC
数据库·oracle