MySQL深度分页如何优化-元一软件
正文一. 题目说明请优化如下SQL语句其中tb表的b列存在索引。SELECT * FROM tb WHERE tb.b 5 LIMIT 30000,5;前同事给出的答案如下。SELECT * FROM tb WHERE id IN (SELECT id FROM tb WHERE tb.b 5 LIMIT 30000,5);此时面试官进行了两个问题追加。优化方案的SQL语句能真实执行吗还有其它的SQL优化手段吗。前同事一个没答上来随即面试官又追加了一个问题。请说一下一开始给到你的SQL语句为什么会慢。那么到这里可以发现字节面试官其实真正的目的是想问为什么深分页会慢这个问题你有仔细想过吗如果问到你你会怎么回答。二. 深分页演示创建如下一张表。CREATE TABLE blog_post ( id INT PRIMARY KEY AUTO_INCREMENT COMMENT 主键, uid VARCHAR(255) NOT NULL COMMENT 唯一标识, like_count INT NOT NULL DEFAULT 0 COMMENT 点赞统计, collect_count INT NOT NULL DEFAULT 0 COMMENT 收藏统计, recommend TINYINT(1) NOT NULL DEFAULT 0 COMMENT 推荐标识, KEY like_count_index(like_count) );向表中插入100W条数据统计如下。---------- | COUNT(*) | ---------- | 1100010 | ----------执行如下一条深分页的查询SQL。SELECT * FROM blog_post WHERE like_count 0 LIMIT 500000,10;耗时如下。10 rows in set (1.34 sec)很简单的一条查询语句结果耗时达到了1.34秒。三. 深分页为什么慢还是以如下这条语句来分析。SELECT * FROM blog_post WHERE like_count 0 LIMIT 500000,10;上述这条SQL语句在执行时MySQL的Server层和InnoDB存储引擎层存在如下这样的交互。通过上图得到如下两个信息。存在大量回表操作。因为不满足覆盖索引所以需要先通过二级索引获取到主键Id然后回表从主键索引中获取到完整记录而回表操作是随机IO会存在大量耗时的情况limit条件判断发生在Server层。Server层准备将数据返回给客户端时才会去判断limit的条件。现在就可以回答为什么深分页慢了首先慢的深分页通常没有使用到覆盖索引此时为了得到完整记录就需要回表而回表是随机磁盘IO速度慢消耗大这就是深分页慢的根本原因。其次深分页场景里limit的偏移量通常很大并且limit的判断发生在Server层这就导致存在大量无效的回表即前50W条记录都是通过二级索引再回表到主键索引得到的但实际这50W条件记录都不是被需要的做的这50W次回表都是无意义的。总结下来就是。没有使用覆盖索引存在大量回表操作limit的判断发生在Server层导致大量回表操作都是无意义的。四. 优化深分页既然明确了深分页为什么慢那么现在就可以很好的针对原因从SQL层面进行优化。既然根本原因是存在大量无效回表那么我们可以着手消灭掉回表操作或者减少回表操作。首先可以将SQL优化如下。SELECT like_count FROM blog_post WHERE like_count 0 LIMIT 500000,10;将查询字段修改为like_count此时深分页就算再深不用回表速度也是十分可观的此时查询耗时如下。10 rows in set (0.13 sec)速度提升十分可观但假如一定要查询完整记录呢此时可以将SQL优化如下。SELECT * FROM blog_post INNER JOIN (SELECT id FROM blog_post WHERE like_count 0 LIMIT 500000,10) AS bpid ON blog_post.id bpid.id;上述语句的查询耗时如下。10 rows in set (0.17 sec)速度提升也是十分可观但其实无论哪种优化方式从SQL层面入手的话思路都是将回表操作进行了减少甚至消除。

相关新闻

日志-Log4j,Logback日志框架的结构原理-元一软件

日志-Log4j,Logback日志框架的结构原理-元一软件

前言本篇文章记录对Log4j,Logback,Log4j2和Slf4j日志框架的结构原理的学习。正文一. 整体结构如果单独使用Log4j,Logback,Log4j2日志框架来进行日志打印,那么使用方式可以如下所示。Log4jimport org.apache.log4j.Logg…

2026/7/12 22:49:51阅读更多 →
etipc开发指南:如何为Linux内核添加自定义TIPC功能

etipc开发指南:如何为Linux内核添加自定义TIPC功能

etipc开发指南:如何为Linux内核添加自定义TIPC功能 【免费下载链接】etipc enhanced tipc 项目地址: https://gitcode.com/openeuler/etipc 前往项目官网免费下载:https://ar.openeuler.org/ar/ etipc(enhanced tipc)是op…

2026/7/12 22:49:51阅读更多 →
深度解析:Cloudflare Tunnel Ingress Controller 架构设计与实战部署

深度解析:Cloudflare Tunnel Ingress Controller 架构设计与实战部署

深度解析:Cloudflare Tunnel Ingress Controller 架构设计与实战部署 【免费下载链接】cloudflare-tunnel-ingress-controller 🚀 Expose the website directly into the internet! The Kuberntes Ingress Controller based on Cloudflare Tunnel. 项目…

2026/7/12 22:44:51阅读更多 →
2026商城小程序开发公司排名:适合深圳地区3C数码企业的服务商哪家好?含零代码SAAS、AI编程、源码定制交付

2026商城小程序开发公司排名:适合深圳地区3C数码企业的服务商哪家好?含零代码SAAS、AI编程、源码定制交付

一、汇总表工具更适合谁价格开发方式核心特点餐宝盈适合所有行业的商家,尤其是拥有自己实体门店的商家,如餐饮、茶饮、烘焙、便利店、生鲜、社区零售门店、教培门店,尤其适合先把点单、预约、会员、发券和复购做起来的老板。99/年模板SAAS先下…

2026/7/12 23:59:58阅读更多 →
vagas社区治理详解:如何维护健康的QA职位生态系统

vagas社区治理详解:如何维护健康的QA职位生态系统

vagas社区治理详解:如何维护健康的QA职位生态系统 【免费下载链接】vagas 🚀 Divulgue facilmente e receba a vaga por completo no seu e-mail 项目地址: https://gitcode.com/gh_mirrors/vagas/vagas vagas作为GitHub上的QA职位社区&#xff0…

2026/7/12 23:59:58阅读更多 →
广氟 PTFE 高速线缆膜 —— 高端线缆绝缘材料新选择

广氟 PTFE 高速线缆膜 —— 高端线缆绝缘材料新选择

PTFE高速线缆膜的基本概念与特点 PTFE 高速线缆膜是以聚四氟乙烯树脂为原料,经膨化双向拉伸制成的多孔绝缘薄膜,作为高速高频通信线缆的核心介质材料,内部形成均匀连通的微孔结构,兼具极低介电常数与介电损耗,能有效降…

2026/7/12 23:59:58阅读更多 →
开源本地智能体 OpenClaw 2.7.9 保姆级部署手册,零代码操控电脑重复工作

开源本地智能体 OpenClaw 2.7.9 保姆级部署手册,零代码操控电脑重复工作

📖前言 OpenClaw,在开发者社区中常被亲切地称为"小龙虾",是当前备受关注的开源 AI 智能体项目,其在 GitHub 平台上已累计获得超过 28 万星标。与常规的对话型 AI 工具不同,OpenClaw 能够理解自然语言指令&a…

2026/7/12 23:59:58阅读更多 →
AI推荐结果怎么优化:适合深圳少儿素质培训机构的GEO服务商哪家好?全程零代码SAAS操作

AI推荐结果怎么优化:适合深圳少儿素质培训机构的GEO服务商哪家好?全程零代码SAAS操作

这两年,越来越多深圳地区的少儿素质培训机构开始关注 GEO。 原因很简单。过去家长找培训机构、找兴趣班、找素质教育课程,主要靠搜索引擎、短视频平台、社交平台种草和熟人推荐;现在越来越多深圳本地家长,已经开始直接在 AI 里提…

2026/7/12 23:59:58阅读更多 →
构建企业级高性能静态站点:基于Rust的Zola架构设计与生产就绪实践

构建企业级高性能静态站点:基于Rust的Zola架构设计与生产就绪实践

构建企业级高性能静态站点:基于Rust的Zola架构设计与生产就绪实践 【免费下载链接】zola A fast static site generator in a single binary with everything built-in. https://www.getzola.org 项目地址: https://gitcode.com/GitHub_Trending/zo/zola 在当…

2026/7/12 23:54:57阅读更多 →
VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异当你在VSCode中启动一个新的TypeScript项目时,第一个技术决策往往从安装方式开始。这个看似简单的选择——全局安装还是项目本地安装——实际上会深刻影响你的开发流程、团队协作和…

2026/7/12 0:02:11阅读更多 →
智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手 【免费下载链接】zhihuishu 智慧树刷课插件,自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 智慧树刷课插件是一款专为智慧树在线教育平台设计的Chrome浏…

2026/7/12 0:02:11阅读更多 →
Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否在GOG或Epic Games Store购买了心仪的游戏…

2026/7/12 0:02:11阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/11 16:20:28阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/11 23:15:38阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/12 21:43:43阅读更多 →