详细请点击 https://blog.csdn.net/qq_38293564/article/details/80883704

以下是自己总结;

接下来我们来重点看一下比较重要的几个字段

type

type类型的性能比较

通常来说,不同的 type 类型的性能关系如下: 
ALL < index < range ~ index_merge < ref < eq_ref < const < system 
ALL 类型因为是全表扫描,因此在相同的查询条件下,它是速度最慢的。 
而 index 类型的查询虽然不是全表扫描,但是它扫描了所有的索引,因此比 ALL 类型的稍快。 
后面的几种类型都是利用了索引来查询数据,因此可以过滤部分或大部分数据,因此查询效率就比较高了。

  • system: 表中只有一条数据,这个类型是特殊的 const 类型。
  • const: 针对主键或唯一索引的等值查询扫描,最多只返回一行数据。const 查询速度非常快,因为它仅仅读取一次即可。 
    例如下面的这个查询,它使用了主键索引,因此 type 就是 const 类型的:explain select * from user_info where id = 2\G;
  • eq_ref: 此类型通常出现在多表的 join 查询,表示对于前表的每一个结果,都只能匹配到后表的一行结果,并且查询的比较操作通常是 =,查询效率较高。例如:EXPLAIN SELECT * FROM user_info,order_info WHERE user_info.id = order_info.user_id\G;
  • ref: 此类型通常出现在多表的 join 查询,针对于非唯一或非主键索引,或者是使用了 最左前缀 规则索引的查询。 
    例如下面这个例子中,就使用到了 ref 类型的查询:EXPLAIN SELECT * FROM user_info,order_info WHERE user_info.id = order_info.user_id AND order_info.user_id = 5\G;
  • range: 表示使用索引范围查询,通过索引字段范围获取表中部分数据记录。这个类型通常出现在 =, <>,>,>=,<,<=,IS NULL,<=>,BETWEEN,IN() 操作中。 
    当 type 是 range 时,那么 EXPLAIN 输出的 ref 字段为 NULL,并且 key_len 字段是此次查询中使用到的索引的最长的那个。例如下面的例子就是一个范围查询:EXPLAIN SELECT * FROM user_info WHERE id BETWEEN 2 AND 8\G;
  • index: 表示全索引扫描(full index scan),和 ALL 类型类似,只不过 ALL 类型是全表扫描,而 index 类型则仅仅扫描所有的索引,而不扫描数据。 
    index 类型通常出现在:所要查询的数据直接在索引树中就可以获取到,而不需要扫描数据,当是这种情况时,Extra 字段 会显示 Using index。例如:EXPLAIN SELECT name FROM user_info \G;上面的例子中,我们查询的 name 字段恰好是一个索引,因此我们直接从索引中获取数据就可以满足查询的需求了,而不需要查询表中的数据. 因此这样的情况下,type 的值是 index,并且 Extra 的值是 Using index。
  • ALL: 表示全表扫描,这个类型的查询是性能最差的查询之一。通常来说,我们的查询不应该出现 ALL 类型的查询,因为这样的查询在数据量大的情况下,对数据库的性能是巨大的灾难. 如一个查询是 ALL 类型查询,那么一般来说可以对相应的字段添加索引来避免。 
    下面是一个全表扫描的例子,可以看到,在全表扫描时,possible_keys 和 key 字段都是 NULL,表示没有使用到索引,并且 rows 十分巨大,因此整个查询效率是十分低下的。EXPLAIN SELECT age FROM user_info WHERE age = 20 \G;

Extra

  • Using filesort 
    当 Extra 中有 Using filesort 时,表示 MySQL 需额外的排序操作,不能通过索引顺序达到排序效果。一般有 Using filesort 都建议优化去掉,因为这样的查询 CPU 资源消耗大。 
    例如下面的例子:EXPLAIN SELECT * FROM order_info ORDER BY product_name \G;
    我们的索引是KEY `user_product_detail_index` (`user_id`, `product_name`, `productor`)
    但是上面的查询中根据 product_name 来排序,因此不能使用索引进行优化,进而会产生 Using filesort。 
    如果我们将排序依据改为 ORDER BY user_id, product_name,那么就不会出现 Using filesort 了。例如:EXPLAIN SELECT * FROM order_info ORDER BY user_id, product_name \G;
  • Using index 
    “覆盖索引扫描”,表示查询在索引树中就可查找所需数据,不用扫描表数据文件,往往说明性能不错。
  • Using temporary 
    查询有使用临时表,一般出现于排序,分组和多表 join 的情况,查询效率不高,建议优化。

转载于:https://www.cnblogs.com/zhangjian816/p/10860230.html

转:MySQL性能优化神器Explain使用分析相关推荐

  1. Mysql 性能优化神器Explain详解

    文章目录 Explain的作用 博文背景 Explain 使用方法 Explain之ID说明 1. ID值相同 2.ID值不同 3.ID值相同,ID值不同共存 Explain的select_type详 ...

  2. MySQL优化filler值_MySQL 性能优化神器 Explain 使用分析

    简介 MySQL 提供了一个 EXPLAIN 命令, 它可以对 SELECT 语句进行分析, 并输出 SELECT 执行的详细信息, 以供开发人员针对性优化. EXPLAIN 命令用法十分简单, 在 ...

  3. 游戏 mysql优化工具_MySQL 性能优化神器 Explain 使用分析

    extra列返回的描述的意义 Using filesort MySQL有两种方式可以生成有序的结果,通过排序操作或者使用索引,当Extra中出现了Using filesort 说明MySQL使用了后者 ...

  4. python mysql索引 优化神器explain 慢查询

    ##############总结########## 数据库中专门帮助用户快速找到数据的一种数据结构 类似于字典的目录的索引 索引的作用:约束和加速查找 工作原理: b+树形结构 最上层是树根,中间是 ...

  5. mysql table combine_Mysql系列-性能优化神器EXPLAIN使用介绍及分析

    MySQL 提供了一个 EXPLAIN 命令, 它可以对 SELECT 语句进行分析, 并输出 SELECT 执行的详细信息, 以供开发人员针对性优化. EXPLAIN 命令用法十分简单, 在 SEL ...

  6. 查询性能优化(使用 Explain 进行分析、优化数据访问、重构查询方式)、存储引擎(InnoDB/MyISAM)

    1.查询性能优化 1.1 使用 Explain 进行分析 Explain 用来分析 SELECT 查询语句,开发人员可以通过分析 Explain 结果来优化查询语句. 比较重要的字段有: select ...

  7. MySQL性能优化速记

    MySQL性能优化速记http://www.bieryun.com/3064.html 总结自<MySQL 5.7从入门到精通(视频教学版)>刘增杰编著. 优化简介 MySQL数据库优化是 ...

  8. MySQL 性能优化技巧

    原文地址:MySQL 性能优化技巧 博客地址:www.extlight.com 一.背景 最近公司项目添加新功能,上线后发现有些功能的列表查询时间很久.原因是新功能用到旧功能的接口,而这些旧接口的 S ...

  9. MySQL性能优化点记录

    第一章 myisam,可以基于blob和text的前500字节,创建索引 myisam 支持fulltext 延迟更新索引 (delay_key_write) CREATE TABLE `table3 ...

最新文章

  1. linux c 函数专挑,Linux C wait函数
  2. 中科院自动化所17篇CVPR 2022 论文新作速览!
  3. 【Groovy】集合遍历 ( 使用集合的 eachWithIndex 方法进行遍历 | 代码示例 )
  4. CTFshow 信息收集 web18
  5. C# 系统应用之注册表使用详解
  6. V记录2(文档)Vue.extend构造器
  7. 开始学习Scheme
  8. R语言data manipulation学习笔记之创建变量、重命名、数据融合
  9. 数字信号处理----数字上变频和下变频都FPGA实现
  10. 91p3.space/index.php,writeup_for_SCTF2016
  11. 使用vlc显示海康网络摄像机的视频
  12. 《springboot学习》 十九 springboot集成mybatis-plus
  13. 空间中球坐标与直角坐标的互化(matlab实现)
  14. Gocv图片合成视频(无音频)
  15. 职场干货——职场多年,一些对付小人的经验之谈
  16. jQuery带缩略图轮播效果图片切换带缩略图
  17. 浙江大学PAT-1003. 我要通过!(20)
  18. 单身快乐(致一个人的情人节)
  19. 互联网的一些小知识点
  20. gitlab mr wip 怎么弄成_GitLab | 为什么我们开源了公司员工手册

热门文章

  1. Python Redis
  2. mysql中case when then的用法
  3. 2018年安卓绿色联盟数据报告
  4. PHPCMS 当前栏目和子目录
  5. Sublime Text 2 安装配置插件
  6. 数据仓库与数据挖掘的一些基本概念
  7. linux环境下获取真实的ip地址
  8. [WebService] xml WebService学习1
  9. 在OpenCV环境下写的两个图像平移C和C++源代码
  10. git合并多个commit