Mysql中explain执行计划信息中字段详解

这篇具有很好参考价值的文章主要介绍了Mysql中explain执行计划信息中字段详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 获取执行计划

explain select * from t5;
--或
desc select * from t5;

Mysql中explain执行计划信息中字段详解,Mysql,数据库,mysql,数据库

2. 字段含义

2.1 id

每个select子句的执行顺序,相同从上到下,不同由大到小执行

2.2 select_type

select语句类型

  • SIMPLE 简单的select查询,查询中不包含子查询或者UNION
  • PRIMARY 查询中若包含任何复杂的子部分,最外层查询则被标记为PRIMARY
  • SUBQUERY 在SELECT或WHERE列表中包含了子查询
  • DERIVED 在FROM列表中包含的子查询被标记为DERIVED(衍生),MySQL会递归执行这些子查询,把结果放在临时表中
  • UNION 若第二个SELECT出现在UNION之后,则被标记为UNION:若UNION包含在FROM子句的子查询中,外层SELECT将被标记为:DERIVED
  • UNION RESULT 从UNION表获取结果的SELECT

2.3 table

当前执行的表名

2.4 partitions

显示当前访问的分区

2.5 type

查询使用了哪种类型

#由好到差依次是
system > const > eq_ref > ref > range > index > all
  • system 表只有一行记录
  • const 表示通过索引一次找到,const用于比较primary key 或者unique索引
  • eq_ref 唯一性索引扫描,使用唯一性索引或主键查找时会发生
  • ref 索引扫描,它返回所有匹配某个单个值的行。此类索引访问只有当使用非唯一性索引或唯一性索引非唯一性前缀时才会发生
  • range 范围扫描索,它返回所有匹配某个单个值的行。此类索引访问只有当使用非唯一性索引或唯一性索引非唯一性前缀时才会发生
  • index 和全表扫描一样。只是扫描表的时候按照索引次序进行而不是行。主要优点就是避免了排序, 但是开销仍然非常大。如在Extra列看到Using index,说明正在使用覆盖索引,只扫描索引的数据,它比按索引次序全表扫描的开销要小很多
  • all 全表扫描

2.6 possible_keys

显示查询使用了哪些索引,表示该索引可以进行高效地查找

2.7 key

key列显示MySQL实际决定使用的键(索引)。如果没有选择索引,键是NULL。要想强制MySQL使用或忽视possible_keys列中的索引,在查询中使用FORCE INDEX、USE INDEX或者IGNORE INDEX

2.8 ley_len

key_len列显示MySQL决定使用的键长度。如果键是NULL,则长度为NULL。使用的索引的长度。在不损失精确性的情况下,长度越短越好

2.9 ref

显示使用哪个列或常数与key一起从表中选择行

2.10 rows

rows列显示MySQL认为它执行查询时必须检查的行数。注意这是一个预估值

2.11 extra

Extra是EXPLAIN输出中另外一个很重要的列,该列显示MySQL在查询过程中的一些详细信息,MySQL查询优化器执行查询的过程中对查询计划的重要补充信息。文章来源地址https://www.toymoban.com/news/detail-685329.html

类型 说明
Using filesort MySQL有两种方式可以生成有序的结果,通过排序操作或者使用索引,当Extra中出现了Using filesort 说明MySQL使用了后者,但注意虽然叫filesort但并不是说明就是用了文件来进行排序,只要可能排序都是在内存里完成的。大部分情况下利用索引排序更快,所以一般这时也要考虑优化查询了。使用文件完成排序操作,这是可能是ordery by,group by语句的结果,这可能是一个CPU密集型的过程,可以通过选择合适的索引来改进性能,用索引来为查询结果排序。
Using temporary 用临时表保存中间结果,常用于GROUP BY 和 ORDER BY操作中,一般看到它说明查询需要优化了,就算避免不了临时表的使用也要尽量避免硬盘临时表的使用。
Not exists MYSQL优化了LEFT JOIN,一旦它找到了匹配LEFT JOIN标准的行, 就不再搜索了。
Using index 说明查询是覆盖了索引的,不需要读取数据文件,从索引树(索引文件)中即可获得信息。如果同时出现using where,表明索引被用来执行索引键值的查找,没有using where,表明索引用来读取数据而非执行查找动作。这是MySQL服务层完成的,但无需再回表查询记录。
Using index condition 这是MySQL 5.6出来的新特性,叫做“索引条件推送”。简单说一点就是MySQL原来在索引上是不能执行如like这样的操作的,但是现在可以了,这样减少了不必要的IO操作,但是只能用在二级索引上。
Using where 使用了WHERE从句来限制哪些行将与下一张表匹配或者是返回给用户。注意:Extra列出现Using where表示MySQL服务器将存储引擎返回服务层以后再应用WHERE条件过滤。
Using join buffer 使用了连接缓存:Block Nested Loop,连接算法是块嵌套循环连接;Batched Key Access,连接算法是批量索引连接
impossible where where子句的值总是false,不能用来获取任何元组
select tables optimized away 在没有GROUP BY子句的情况下,基于索引优化MIN/MAX操作,或者对于MyISAM存储引擎优化COUNT(*)操作,不必等到执行阶段再进行计算,查询执行计划生成的阶段即完成优化。
distinct 优化distinct操作,在找到第一匹配的元组后即停止找同样值的动作

到了这里,关于Mysql中explain执行计划信息中字段详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MongoDB索引操作和执行计划Explain()详解

    主要是讲下Mongodb的索引的查看、创建、删除、类型说明,还有就是Explain执行计划的解释说明。    可以转载,但请注明出处。    之前自己写的SpringBoot整合MongoDB的聚合查询操作,感兴趣的可以点击查阅。 https://www.cnblogs.com/zaoyu/p/springboot-mongodb.html 数组相关的操作 https://ww

    2024年02月13日
    浏览(33)
  • 一文带你了解MySQL之Explain执行计划

    前言: 一条查询语句在经过MySQL查询优化器的各种基于成本和规则的优化会后生成一个所谓的 执行计划 ,这个执行计划展示了接下来具体执行查询的方式,比如多表连接的顺序是什么,对于每个表采用什么访问方法来具体执行查询等等。 MySQL 为我们提供了 EXPLAIN 语句来帮助

    2024年02月06日
    浏览(43)
  • 玩转MySQL之SQL优化之EXPLAIN执行计划

    从今天开始本系列文章就带各位小伙伴学习数据库技术。 数据库技术是Java开发中必不可少的一部分知识内容。也是非常重要的技术。本系列教程由浅入深, 全面讲解数据库体系。 非常适合零基础的小伙伴来学习。 全文大约 【1965】字 ,不说废话,只讲可以让你学到技术、明

    2024年02月08日
    浏览(56)
  • mysql、clickhouse查询数据库所有的表以及字段信息

    mysql查询数据库所有的表以及字段信息 SELECT     table_schema 数据库名,   table_name 表名,   COLUMN_NAME 列名,   COLUMN_TYPE 数据类型,   DATA_TYPE 字段类型,   CHARACTER_MAXIMUM_LENGTH 长度,   IS_NULLABLE 是否为空,   COLUMN_DEFAULT 默认值,   COLUMN_COMMENT 备注  FROM  INFORMATION_SCHEMA.COLUMNS where -- tab

    2024年02月08日
    浏览(70)
  • Mongo执行计划explain分析

    3.0+的explain有三种模式,分别是:queryPlanner、executionStats、allPlansExecution。现实开发中,常用的是 executionStats模式 。 在查询语句后面加上explain(\\\"executionStats\\\")   第一层:executionTimeMillis  最为直观explain返回值是 executionTimeMillis值 ,指的是我们 这条语句的执行时间 ,这个值当然

    2024年02月04日
    浏览(58)
  • HiveSQL执行计划查看(EXPLAIN)

    Hive是一个基于Hadoop的数据仓库工具,通过SQL语言对分布式数据进行处理。在Hive中,执行计划是指查询语句的执行过程,包括查询语句的优化、查询计划生成和查询执行。对于HiveSQL的执行计划可以通过EXPLAIN命令进行查看。本文将为大家介绍HiveSQL执行计划的相关内容。 EXPLAI

    2024年02月16日
    浏览(35)
  • Spark Explain:查看执行计划

    Spark SQL explain 方法有 simple、extended、codegen、cost、formatted 参数,具体如下 从 3.0 开始,explain 方法有一个新的 mode 参数,指定执行计划展示格式 只展示物理执行计划,默认 mode 是 simple spark.sql(sqlstr).explain() 展示物理执行计划和逻辑执行计划 spark.sql(sqlstr).explain(mode=“extended”

    2024年02月16日
    浏览(45)
  • SQL优化之EXPLAIN执行计划

    从今天开始本系列文章就带各位小伙伴学习数据库技术。 数据库技术是Java开发中必不可少的一部分知识内容。也是非常重要的技术。本系列教程由浅入深, 全面讲解数据库体系。 非常适合零基础的小伙伴来学习。 全文大约 【1965】字 ,不说废话,只讲可以让你学到技术、明

    2024年02月07日
    浏览(77)
  • ClickHouse查看执行计划(EXPLAIN语法)

    EXPLAIN [AST | SYNTAX | QUERY TREE | PLAN | PIPELINE | ESTIMATE | TABLE OVERRIDE] [setting = value, ...]     [       SELECT ... |       tableFunction(...) [COLUMNS (...)] [ORDER BY ...] [PARTITION BY ...] [PRIMARY KEY] [SAMPLE BY ...] [TTL ...]     ]     [FORMAT ...] 查询计划的类型说明:  AST(抽象语法树):在AST级别优化之后的查

    2024年02月13日
    浏览(38)
  • Jmeter(七) - 从入门到精通 - 建立数据库测试计划实战<MySQL数据库>(详解教程)

    1.简介   在实际工作中,我们经常会听到数据库的性能和稳定性等等,这些有时候也需要测试工程师去评估和测试,上一篇文章主要介绍了jmeter连接和创建数据库测试计划的过程,在文中通过示例和代码非常详细地介绍给大家,希望对各位小伙伴和童鞋们的学习或者工作具有一

    2024年02月13日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包