您的当前位置:首页 >时尚 >面试官:limit 100w,10为什么慢?如何优化? 正文
时间:2025-11-05 11:51:08 来源:网络整理编辑:时尚
在 MySQL 中,limit X,Y 的查询中,X 值越大,那么查询速度也就越慢,例如以下示例:limit 0,10:查询时间大概在 20 毫秒左右。limit 1000000,10:查询时间可能是

在 MySQL 中,面试limit X,什慢Y 的查询中,X 值越大,何优化那么查询速度也就越慢,面试例如以下示例:
limit 0,什慢10:查询时间大概在 20 毫秒左右。limit 1000000,何优化10:查询时间可能是 15 秒左右(1秒等于 1000 毫秒),甚至更长时间。面试所以,什慢可以看出,何优化limit 中 X 值越大,面试那么查询速度都越慢。什慢
这个问题呢其实就是何优化 MySQL 中典型的深度分页问题。那问题来了,面试为什么 limit 越往后查询越慢?什慢如何优化查询速度呢?
在数据库查询中,当使用 LIMIT x,何优化 y 分页查询时,如果 x 值越大,查询速度可能会变慢。这主要是因为数据库需要扫描和跳过 x 条记录才能返回 y 条结果。随着 x 的增加,需要扫描和跳过的记录数也增加,从而导致性能下降。
例如 limit 1000000,10 需要扫描 1000010 行数据,然后丢掉前面的 1000000 行记录,所以查询速度就会很慢。
对于 MySQL 深度分页比较典型的优化手段有以下两种:
起始 ID 定位法:使用最后查询的服务器托管 ID 作为起始查询的 ID。索引覆盖+子查询。起始 ID 定位法指的是 limit 查询时,指定起始 ID。而这个起始 ID 是上一次查询的最后一条 ID。例如上一次查询的最后一条数据的 ID 为 6800000,那我们就从 6800001 开始扫描表,直接跳过前面的 6800000 条数据,这样查询的效率就高了,具体实现 SQL 如下:
复制select name, age, gender from person where id > 6800000 -- 核心实现 SQL order by id limit 10;1.2.3.4.其中 id 字段为表的主键字段。
为什么起始ID查询效率高呢?因此这种查询是以上一次查询的最后 ID 作为起始 ID 进行查询的,而上次的 ID 已经定位到具体的位置了,所以只需要遍历 B+ 树叶子节点的双向链表(主键索引的底层数据结构)就可以查询到后面的数据了,所以查询效率就比较高,如下图所示:

如果上次查询结果为 9,源码库之后再查询时,只需要从 9 之后再遍历 N 条数据就能查询出结果了,所以效率就很高。
优缺点分析这种查询方式,只适合一页一页的数据查询,例如手机 APP 中刷新闻时那种瀑布流方式。
但如果用户是跳着分页的,例如查询完第 1 页之后,直接查询第 250 页,那么这种实现方式就不行了。
此时我们为了查询效率,可以使用索引覆盖加子查询的方式,具体实现如下。
假设,我们未优化前的 SQL 如下:
复制select name, age, gender from person order by createtime desc limit 1000000,10;1.2.3.4.在以上 SQL 中,createtime 字段创建了索引,但查询效率依然很慢,因为它要取出 100w 完整的数据,并需要读取大量的索引页,和进行频繁的回表查询,所以执行效率会很低。
此时,我们可以做以下优化:
复制SELECT p1.name, p1.age, p1.gender FROM person p1 JOIN ( SELECT id FROM person ORDER BY createtime desc LIMIT 1000000, 10 ) AS p2 ON p1.id = p2.id;1.2.3.4.5.相比于优化前的 SQL,优化后的站群服务器 SQL 将不需要频繁回表查询了,因为子查询中只查询主键 ID,这时可以使用索引覆盖来实现。那么子查询就可以先查询出一小部分主键 ID,再进行查询,这样就可以大大提升查询的效率了。
索引覆盖(Index Coverage)是一种数据库查询优化技术,它指的是在执行查询时,数据库引擎可以直接从索引中获取所有需要的数据,而不需要再回表(访问主键索引或者表中的实际数据行)来获取额外的信息。这种方式可以减少磁盘 I/O 操作,从而提高查询性能。
佳能242.8挂机镜头的全面评测(探索佳能242.8挂机镜头的性能和适用性能力)2025-11-05 11:49
windows 7待机不断网在空闲时不让其断网的设置方法2025-11-05 11:37
正在使用的系统是什么版本如何查看windows 7系统详情2025-11-05 11:28
windows 7如何切换显示屏方向即更改显示屏幕的显示方向2025-11-05 11:08
windows 7怎么设置默认浏览器(程序) windows 7修改默认浏览器2025-11-05 10:18
Windows7系统/XP简单几步禁用开机启动项(无需杀毒软件)2025-11-05 09:56
windows7系统下如何创建一个别人无法删除的文件夹2025-11-05 09:45
技嘉D3VA的性能和特点详解(探索技嘉D3VA主板的卓越性能和可靠性能为何赢得用户青睐)2025-11-05 09:40
如何关闭有损硬盘的windows7系统服务2025-11-05 09:34
电脑系统更换教程(详细步骤和注意事项,让你轻松回归经典XP系统)2025-11-05 11:49
系统更新完成后windows 7会弹出强制关机询问命令请问如何去除2025-11-05 11:47
windows 7系统忘记管理员登陆密码后的解决方法2025-11-05 11:36
利用UAC来提高Win 7的安全2025-11-05 10:18
轻松解除U盘写保护的方法(终结烦恼,摆脱U盘写保护限制)2025-11-05 10:06
windows 7系统属性修改制造商和型号以及oem图片2025-11-05 09:30
windows 7系统开机后背景是黑色无法加载熟悉的桌面与任务栏2025-11-05 09:25
windows 7网上邻居怎么找不到?在哪里?2025-11-05 09:22
windows 7运行太慢怎么关闭多余的进程?2025-11-05 09:16