当前播放: 为什么SQL语句使用了索引,但却还是慢查询?
00:00 / 00:00
标清
  • 标清
1.0x
  • 2.0x
  • 1.5x
  • 1.25x
  • 1.0x
  • 0.5x
网页全屏
全屏
00:00
付费课程,可试看
合辑:新版短视频
Kafka某台broker IO阻塞,为何会导致发送方无法发送消息?
什么是C++中的The Rule of Three?
基于时序特性,如何构建一个时序存储引擎?
如何利用反射和泛型编程让你的Java代码更优雅?
C++中为什么move constructor需要加noexcept?
如何使用Postman做接口自动化测试?
给你点“颜色”瞧瞧
如何用Spark实现一个通用大数据计算引擎?
如何让你的Robot Framework飞起来?
如何透彻理解Selenium和WebDriver?
Spring Data JPA 如何进行复杂动态查询?
Spring Data JPA如何实现动态部分更新?
未来的编程语言长什么样?
高并发场景下锁的使用技巧(悲观锁/乐观锁/分布式锁)
为什么React组件要声明key?
为什么React不推荐使用Mixin?
如何设计一个高可用的配置中心?
如何通过代码技巧提升内存使用效率?
如何全面地改造Robust?
如何基于Netty构建一个简单的RPC服务?
Spring Boot中如何使用HTTP/2?
教你10分钟玩转Gradle plugin
如何深入理解Kube-Proxy?
如何深入理解Kubernetes架构?
如何使用和优化iOS中的WebView?
一个1000万资金重复支付的代码剖析
如何实现数据异构的多级缓存策略?
如何从 CRD 扩展开发切入Kubernetes源码学习?
如何更轻松简单地从源码编译部署Kubernetes?
如何设计并实现一个高可用的订单系统?
ZooKeeper的ZAB算法与Paxos的本质区别是什么?
微服务框架Apache ServiceComb的设计思想有哪些?
如何深入理解分布式事务TCC实现原理?
SSR 、CSR、预渲染、同构等首屏优化技术要如何选择?
如何利用ClassPath解决Java开发工程问题?
如何读懂Babel转换出的JavaScript代码?
大厂前端面试中经常提到的Promise要如何实现?
使用 Vue 开发小程序是怎么做到的?
为什么CSS要放在header底部,JavaScript要放在body底部?
前端Router是怎么实现的?
如何理解现代发布策略?以Kubernetes为例
JavaScript中如何封装一个具有自动失败重试功能的HTTP模块?
JavaScript中如何优雅地实现函数防抖?
服务发现技术是如何演进出来的?
HTTP/2能带来哪些性能提升?
如何快速对请求链路的关键点进行网络问题排查?
React 中如何实现模块的按需加载?
究竟要不要使用React Hooks?
TLS1.3原理以及在Nginx上的应用
如何利用有效的资源扛住618大促流量?

为什么SQL语句使用了索引,但却还是慢查询?

林晓斌 腾讯云

为什么我的 SQL 语句明明使用了索引,但却还是会记录到慢查询中?我有一个大概 13 亿行数据的 MySQL 表 t_people,其中包括字段 ID、AGE、NAME、ADDRESS 等,现在我想查询所有年龄在 10 到 15 岁之间的小朋友,为了提高查询效率,于是我给 AGE 字段建立了索引。但建完索引之后,我使用 SQL 语句“select * from t_people where age between 10 and 15”开始查询,查询之后发现这条语句居然是个慢查询。你知道为什么吗?我应该如何优化?

作者介绍

林晓斌,网名“丁奇”,腾讯云数据库负责人。丁奇有超过 10 年的数据库开发经验,作为活跃的 MySQL 社区贡献者,他专注于数据存储系统、MySQL 源码研究和改进、MySQL 性能优化和功能改进,热衷于解决 MySQL 疑难问题。

展开
¥4.99 购买
开通VIP
99+
登录 后留言

精选留言(66)

  • 郭蕾
    接下来我们每日一课产品会逐步迭代,所有的视频都会换为类似这个视频的样子。从一个大家疑惑的点进去,讲原理,讲解决方案,15分钟帮你彻底搞懂这个问题。如果你喜欢这个形式,欢迎给我点赞,或者评论区给我反馈。
    2019-05-17
    6
    333
  • leslie
    不错:果然是大神,学了老师的45讲;索引的理解和使用比过去好了许多;不过再次听又有新的收获-怪不得最近explain出来的表有索引却还是全表扫描了😀
    2019-05-17
    25
  • 高志强
    老师太棒了, 扫描行数才是判断一个sql语句最关键的因素。
    2019-05-19
    18
  • 不靠谱~
    最后一个优化不明白的同学,我给出我的拙见。我认为使用like '张%' 时是绕不开左前缀匹配的,也就是说不论age是多少都要进行匹配,所以扫描行数取决于姓张的人数。优化后不需要左前缀匹配了,扫描的行数就是姓张且年龄是8的,所以行数大大减少了。 如有问题,希望大家批评指正。
    2019-06-11
    13
  • 山大荣
    丁奇老师的课都是干货,听了停不下来啊。墙裂推荐!
    2019-05-17
    12
  • QQ怪
    牛逼,牛逼,大牛就是厉害👍,现在才知道扫描行数才是判断执行效率的最佳手段
    2019-05-28
    8
  • 最后的表演
    老师,最后那里还是不是很明白,建立一个虚拟列,和 age 的联合索引,然后姓张的记录不是有 8000 万条吗,那还是要扫描 8000 万次再回表 100 万次,为什么会只扫描 100 万次呢?麻烦老师解答了。哈哈 这么多文章,就感觉是老师的 MySQL 讲的很好。赞٩(๑^o^๑)۶
    2019-05-26
    1
    8
  • Evildoer
    喜欢这种类型的每日一课!!!!!!
    2019-05-25
    5
  • null
    如果不是声音和专栏音频一样,我都怀疑这是不是丁奇老师😂
    2019-06-27
    4
  • 江南_Emma
    使用索引本来就是减少扫描行数啊
    2019-06-12
    4
  • 林三杠
    学到了虚拟列
    2019-06-04
    3
  • lunar
    一般线上的数据库稳定运行后是不会,也不能升级的,又要怎么实现这些优化呢🤔(旧项目感觉用5.5的较多)
    2019-05-31
    3
  • sprinty
    最后一个优化的理解: 索引结构是在姓张的同时,age是有序的,所以只扫描了姓张且年龄等于8的100万行。
    2019-06-20
    2
  • 公号-代码荣耀
    这种视频形式太棒了
    2019-05-25
    2
  • 林老师的课满满的干货,谢谢!要是每日一课也配文字稿就更好了。
    2019-05-25
    2
  • allean
    大神怎么这么胖了啊,但课还是一如既往的精彩,实用!
    2019-05-18
    2
  • Zend
    丁奇老师讲课真是深入浅出,让自己豁然开朗。SQL被记录到慢查询日志,并不代表这条SQL没有用到索引,这其中有很多原因,但证明这条SQL执行时花费的时间超过系统设置的long_query_time参数的值,我们索引优化的最终目的是减少查询目标数据的所要执行的扫描行数,...还讲到了 MySQL 5.6中的 index condition pushdown ,MySQL 5.7中的虚拟列
    2019-11-27
    1
  • topsion
    联合索引的第二个字段不会排序吗?如果是联合索引为什么不优先第一个字段排序,如果第一个字段一样根据第二个字段排序,这样就不用在联合索引树上遍历完所有第一个字段一样的值了啊
    2019-11-05
    1
  • 冰冰的冻结
    有个地方 我不理解怎么优化 就是视频中获取小朋友信息 年龄在 15-20 岁的、 该如何优化呢 你说的索引过滤性不好 这个如何优化呢
    2019-09-07
    1
  • 独孤灬一剑
    1.索引和慢查询没有必然联系
    2.检查一个查询语句的执行效率最终要看的是扫描行数
    3.使用虚拟列和联合索引来提升复杂查询的执行效率
    2019-06-28
    1
收起评论
其他推荐
33:16
PerfLabs: 以Cloud Native的姿势进行应用测试和调优
乐鸿辉 携程高级研发经理
免费
38:40
NBF:新零售服务开放的Serverless架构与深度实践
冯微峰 阿里巴巴高级技术专家
免费
42:37
诗和远方:蚂蚁金服Service Mesh深度实践
敖小剑 蚂蚁金服高级技术专家
免费