当前位置: 首页 > news >正文

Mysql 大表limit查询优化原理

优化前( 查询耗时 114.1s)

explain select * from link_exec_task limit 80000, 10   # 查询耗时 114.1s

优化后( 查询耗时 0.121s)

explain select * from link_exec_task a
INNER JOIN (select id from link_exec_task limit 80000, 10) b on a.id = b.id   #0.121s

原理:
观察以下sql 查询计划
在这里插入图片描述

查询优化的原因:
主键ID形成的索引是聚簇索引(B+树),叶子节点存的是记录(数据);而普通字段锁形成的索引是非聚簇索引,非聚簇索引的叶子节点里面存的是记录的ID。

查找第8w条,聚簇索引和非聚簇索引对比:

聚簇索引方式:由于你的叶子存的是数据,一个叶子节点占用空间大,故而一次IO可能查询到少数的叶子节点,故而需要IO很多次,才能找到第8w条记录。
非聚簇索引方式:由于你的叶子存的是记录的ID,一个叶子节点占用空间小,故而一次IO可以查询到大量的叶子节点,故而只需要少次IO次,就能快速找到第8w条记录的ID。最后找到10条记录的ID后,再通过连表查询,10条记录的innner join 处理起来就很快了。

故而上面就算我查询哪怕没有用到 status字段进行查询,Innodb执行引擎也会借助status索引字段锁使用的非聚簇索引,来快使找到第8w条记录。

问:为什么借助的是status索引字段,而不使用其他非聚簇索引字段?
答:因为会挑一个索引字段空间占用最小的字段,在该表的索引字段中,就status字段的空间占用最小,这样一次磁盘IO可有查询出更多的索引页。

问:子查询里面可能select id吗?我还能select 其他吗?
答:正常情况下不行,例如你select * ,那么此时你的查询耗时会和优化前查询耗时一样,因为此时你的查询不是覆盖索引查询,由于非聚簇索引里面没有你要select的内容,故而innodb直接就不借助非聚簇索引找第8w条记录;而是直接从聚簇索引里,找出第8w条记录,故而速度会变得很慢。
当然,除非你select 的字段已经在非聚簇索引树里面了,此时还是使用覆盖索引,还是走非聚簇索引,查询速度也会快。

http://www.lryc.cn/news/476933.html

相关文章:

  • 封装axios、环境变量、api解耦、解决跨域、全局组件注入
  • CDGP|数据治理于企业而言到底有什么用?
  • Java学习教程,从入门到精通,Java数组(Arrays)语法知识点及案例(19)
  • 11.4OpenCV_图像预处理习题02
  • go的template示例
  • 『YOLO』| 断点训练、解决训练中断异常情况
  • MQTT+Disruptor 提高物联网高并发
  • SpringBoot项目集成ONLYOFFICE
  • 用于nodejs的开源违禁词检测工具 JavaScript node-word-detection
  • FFmpeg 4.3 音视频-多路H265监控录放C++开发十二:在屏幕上显示多路视频播放,可以有不同的分辨率,格式和帧率。
  • Linux权限问题(账号切换,权限,粘滞位)
  • el-upload,上传文件,后端提示信息,前端需要再次重新上传(不用重新选择文件)
  • 数字信号处理Python示例(5)使用实指数函数仿真PN结二极管的正向特性
  • ctfshow(89,90,92,93)--PHP特性--intval函数
  • 构建ubuntu22.04.4私有源服务以及配置ubuntu私有源
  • 模块功能的描述方法
  • 【WPF】MatrixTransform类
  • 【C++】继承的理解
  • day50 图论章节刷题Part02(99.岛屿数量 深搜、99.岛屿数量 广搜、100.岛屿的最大面积)
  • 超详细从基准将VMware ESXi 升级到 vSphere 6.7U1教程
  • 华为OD机试 - 打印机队列 - 优先队列(Java 2024 E卷 200分)
  • MatrixOne 助力西安天能替换MySQL+MongoDB+ES打造一体化物联网平台
  • 正则表达式---元字符
  • 数据库Redis篇
  • 在区块链技术中,什么是权益证明(PoS)?
  • Spring Boot——日志介绍和配置
  • Python实现全国岗位招聘信息可视化分析(源码+论文+部署讲解)
  • 【真题笔记】16年系统架构设计师要点总结
  • 2024 CSS保姆级教程二 - BFC详解
  • Knowledge-refined Denoising Network for Robust Recommendation