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

MySQL——EXPLAIN

怎么查看一条语句是否走了索引

通过explain查看SQL的执行计划,有这些字段:

  • possible_keys:可能用到的索引
  • key:表示实际用到的索引,如果这一项为NULL,说明没有用到索引
  • key_ken:索引的长度
  • rows:表示扫描到的数据行数
  • type:数据扫描类型
  • extra:一些额外信息

type字段执行效率从低到高:

  • ALL:全表扫描,开销很大,尽量避免
  • index:全索引扫描,和all差不多,不过是对索引表进行全扫描。好处是不需要对数据进行全排序,但是仍然开销很大,因此要尽量避免
  • range:索引范围扫描,一般在where子句中使用<、>、in、between等关键词,只检索给定范围的行,属于范围查找。从这一级别开始,索引的作用会越来越明显,因此尽量让type类型在这一级别及以上
  • ref:非唯一索引扫描,表示采取了非唯一索引,或者唯一索引的非唯一性前缀,返回数据可能是多条,所以可能要对目标值进行小范围查询。好处是不需要扫描全表,即使有重复值,也只是在非常小的范围查询
  • eq_ref: 唯一索引扫描,使用主键或者唯一索引时产生的访问方式,通常使用多表联查。比如关联条件是两张表的user_id相等,且user_id是唯一索引。
  • const: 结果只有一条的主键或唯一索引扫描,表示主键或者唯一索引与常量值进行比较。比如select name from user where id = 1

extra:

  • Using filesort: 查询语句包含order by语句,而且无法利用索引完成排序操作,就不得不选择排序算法来完成,甚至是文件排序,效率很低,要避免这种情况的出现。
  • Using temporary:使用了临时表保存中间结果,MySQL对查询结果排序时使用临时表,常见于排序order by和group by,效率低,要避免这种情况的出现。
  • Using index:数据只需在索引就可以全部获得,不需要回表,也就是覆盖索引。

extra字段中Using index和Using where的区别

  • Using index:意味着SQL使用了覆盖索引,不需要回表,可以提高查询性能
  • Using where:意味着MySQL服务器在存储引擎检索行后再过滤。也就是存储引擎返回的行不一定满足条件,需要在server层再过滤

如果SQL和索引都没问题,查询还是很慢怎么办

  • 分批查询:将一个大的查询拆分成几个小的查询,每次查询只返回小部分数据
  • 增加缓存:针对频繁查询的热点数据,可以放到Redis缓存,避免每次都要请求MySQL
  • 分表:如果表的数据量比较大,经验值是500W以上,通过分表,减少每次查询的数据总量来解决查询慢的问题
  • 分库:针对写多读少的问题,单库的性能无法抗住高并发,就需要分库,把并发请求分布到多个库。
  • 主从复制:针对读多写少的情况,通过主从复制来分摊请求的流量


http://www.kler.cn/a/445367.html

相关文章:

  • day5,数据结构,单向,双向,循环链表
  • 【Unity3D】实现可视化链式结构数据(节点数据)
  • WebGL入门到进阶教程 - 系统学习Web3D技术
  • PostgreSQL数据库访问限制详解
  • EE308FZ_Sixth Assignment_Beta Sprint_Sprint Essay 3
  • 深入浅出Flink CEP丨如何通过Flink SQL作业动态更新Flink CEP作业
  • 深入理解 C++ 中 std::vector 和 std::set 容器的使用
  • 机器学习中做时间序列模型考虑把时间作为特征分析
  • Java 后端给前端返回的long精度缺失,导致数据不一致
  • 京东大数据治理探索与实践 | 京东零售技术实践
  • 构建全方位大健康零售帮助中心:提升服务与体验
  • ES6学习Set 、Map(六)
  • 新能源汽车产销数据分析
  • MYSQL_联合查询(全)
  • MacOS安装MySQL
  • 监控IP频繁登录服务器脚本
  • 卡尔曼滤波效果(python应用)
  • 半导体制造技术导论(第二版)萧宏 第十二章 化学机械研磨工艺
  • 负载均衡-lvs
  • TDengine 新功能 通过 UID 删除不可见表
  • Midjourney参数大全
  • 【ETCD】当客户端从follower节点发起写请求时候,ETCD集群是如何处理此次的写请求呢?
  • 如何从 ASP.NET Core IIS上传大文件一些配置
  • [python SQLAlchemy数据库操作入门]-02.交易数据实体类建立
  • Kioptix Level 2靶场练习保姆级---春不晚
  • git企业开发的相关理论(一)