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

什么是深分页

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 页),适合下拉滚动加载。
  • 如果业务需要任意页码跳转,深分页很难优化,一般业务上限制最大页码,不让用户查很深的页。
相关推荐
梦想平凡42 分钟前
百游棋牌源代码开发搭建教程(二):PostgreSQL安装、业务表创建与版本化迁移
数据库·游戏·postgresql
企业解惑小助手1 小时前
如何禁止文字复制?企业文档防复制项目需求拆解方案
运维·数据库·安全
蓝速科技1 小时前
酒店门店 AI 数字人前台场景适配与落地指南
大数据·运维·数据结构·数据库·人工智能·科技
oradh2 小时前
Oracle UNDO 数据文件丢失处理(案例一)
数据库·oracle
richard_first2 小时前
Transformer与大语言模型:第18章 向量数据库
数据库·人工智能·自然语言处理·transformer·embedding
El Shaddai.plus2 小时前
达梦数据库的执行计划操作符介绍
数据库·oracle
神仙别闹2 小时前
基于 QT(C++)开发的地铁换乘系统
数据库·c++·qt
Token掘金室3 小时前
Function Calling完整调用教程
大数据·数据库·人工智能
钱栈up3 小时前
qoder CLI 1.0.45 本地小说生成工作流搭建:Feature Gate 配置与长文本断连排查从死锁到全流程跑通:Python德州扑克项目的优化
java·前端·数据库