news 2026/5/1 1:58:56

SELECT * FROM orders WHERE id > 1000000 ORDER BY id LIMIT 10;的庖丁解牛

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SELECT * FROM orders WHERE id > 1000000 ORDER BY id LIMIT 10;的庖丁解牛

SELECT * FROM orders WHERE id > 1000000 ORDER BY id LIMIT 10;高性能分页查询的典范,它通过游标分页(Cursor-based Pagination)避免了传统OFFSET的性能陷阱。


一、执行机制:为什么高效?

▶ 1.执行计划解析
EXPLAINSELECT*FROMordersWHEREid>1000000ORDERBYidLIMIT10;
  • 关键输出
    type: range key: PRIMARY rows: 10 Extra: Using where; Using index
▶ 2.执行流程

定位 id=1000000

通过聚簇索引向右扫描

读取下 10 行

返回结果

  • 核心优势
    • 仅扫描 10 行(而非OFFSET的 1,000,010 行)
    • 直接利用聚簇索引(InnoDB 主键即数据存储顺序)

💡核心认知
WHERE id > N+ORDER BY id= 直接跳转到 N+1 位置


二、索引利用:聚簇索引的威力

▶ 1.InnoDB 聚簇索引结构
  • 数据存储
    • 主键索引的叶子节点 = 完整行数据
    • 物理存储按主键顺序排列
  • 查询优势
    • WHERE id > N→ 直接定位到 B+ 树的 N+1 位置
    • 顺序读取后续 10 行 →无随机 I/O
▶ 2.对比非聚簇索引
  • MyISAM 表
    • 主键索引 ≠ 数据存储顺序
    • 需额外回表 → 性能下降
  • InnoDB 非主键查询
    • id非主键 → 需回表 → 性能下降

📌关键点
此查询高效的前提是id为 InnoDB 聚簇索引(通常是自增主键)


三、工程价值:游标分页的实践

▶ 1.前端交互设计
  • 传递游标
    • 前端保存上一页最后一条的id
    • 下一页请求携带cursor=id
  • 示例 API
    GET /orders?cursor=1000000&limit=10
▶ 2.后端实现
// Laravel 示例publicfunctionindex(Request$request){$cursor=$request->input('cursor',0);$limit=min($request->input('limit',10),100);$orders=Order::where('id','>',$cursor)->orderBy('id')->limit($limit)->get();returnresponse()->json(['data'=>$orders,'next_cursor'=>$orders->last()?->id]);}
▶ 3.性能对比
查询方式扫描行数响应时间(1亿行表)
LIMIT 1000000, 101,000,01012.3 秒
游标分页100.008 秒

四、避坑指南

陷阱破局方案
id 非自增主键确保排序字段是聚簇索引
并发插入导致漏数据接受最终一致性(业务可容忍)
反向分页困难单独实现WHERE id < cursor ORDER BY id DESC

五、终极心法

**“游标不是技巧,
而是索引的舞蹈——

  • 当你利用聚簇
    你在消除随机;
  • 当你传递锚点
    你在跳过扫描;
  • 当你接受最终一致
    你在拥抱现实。

真正的分页优化,
始于对存储的敬畏,
成于对细节的精控。”


结语

从今天起:

  1. 深度分页必用游标方案
  2. 确保排序字段是聚簇索引
  3. EXPLAIN验证执行计划(type=range)

因为最好的分页,
不是跳过百万行,
而是精准定位下一程。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 13:33:41

利用Fleet驾驭多集群Elastic部署:统一管理与数据本地化

提升全球运营&#xff1a;利用Fleet驾驭多集群Elastic部署 在当今的全球性企业中&#xff0c;分布式基础设施已成为常态而非例外。组织跨越各大洲运营&#xff0c;并受到客户邻近性和法规要求的驱动。对于Elastic Stack而言&#xff0c;这种现实通常转化为多集群部署模式&…

作者头像 李华
网站建设 2026/4/29 20:24:25

MariaDB 备份与恢复完整指南

文章目录 MariaDB 备份与恢复完整指南 一、环境准备与测试数据创建 1. 检查 MariaDB 状态 2. 创建测试数据库和数据 二、使用 mysqldump 进行逻辑备份 1. 基本备份命令 2. 高级备份选项 3. 自动备份脚本 三、使用 mariadb-backup 进行物理备份 1. 安装 mariadb-backup 2. 完整备…

作者头像 李华
网站建设 2026/4/29 19:00:32

【AI大模型】如何真正“不花一分钱”部署一个属于你的大模型

看了那么多chatGPT的文章&#xff0c;作为一名不精通算法的开发&#xff0c;也对大模型心痒痒。但想要部署自己的大模型&#xff0c;且不说没有算法相关的经验了&#xff0c;光是大模型占用的算力资源&#xff0c;手头的个人电脑其实也很难独立部署。就算使用算法压缩后的大模型…

作者头像 李华
网站建设 2026/4/27 11:24:59

工业设备智能运检监测管理系统方案

在工业企业的日常运营中&#xff0c;设备管理领域普遍遭遇着多重挑战&#xff1a;设备运维成本居高不下&#xff0c;安全隐患的防控工作困难重重&#xff0c;检修维护的效率难以提升&#xff0c;以及一旦发生事故&#xff0c;追溯原因的过程繁琐且复杂。尤为关键的是&#xff0…

作者头像 李华
网站建设 2026/4/28 13:33:40

开源知识库---MaxKB:一款基于 LLM 大语言模型的知识库问答系统

MaxKB 是一款基于 LLM 大语言模型的知识库问答系统。MaxKB Max Knowledge Base&#xff0c;旨在成为企业的最强大脑。 •开箱即用&#xff1a;支持直接上传文档、自动爬取在线文档&#xff0c;支持文本自动拆分、向量化&#xff0c;智能问答交互体验好&#xff1b;•无缝嵌入…

作者头像 李华