output 列名 备注 id select的编号,从1开始,如果是没有子查询,则编号为1,如果有子查询,则最外侧的select为1,然后按照select的顺序从左到右逐渐递增 select_type...查询类型,例如简单查询,子查询,Union查询等(具体见下表) table select所访问的表(也可以是派生表) partitions 用于分区表, 表示select所访问的表的分区 type 表示该...possible_keys 表示可能会用到的索引用来加速查询,未经过优化器确定。 key 经过优化器确定之后,实际采用的索引 key_len 实际采用的索引的字段长度....(计算方式与字符集、字段类型是否为固定长度以及是否可以为null有关系) ref 表示key在查找数据的时候,所用到的常量或者列名 rows 查询所扫描的行数,但是一般不准确。...ref可以用于使用=或操作符的带索引的列.或者仅查询主键,并且condition里面使用索引。
MySQL里的explain命令内容还是很丰富的,值得好好的挖掘出不少东西来。...本身来说explain就是生成执行计划的内容,如果细看,这个内容和Oracle explain plan for的结果相比还是有差距的。...首先是一个比较实际的用法,查询语句我们可以查看执行计划,如果是DML语句呢,他是直接变更了还是只是生成执行计划而已,明白这一点很重要。...explain 生成DML的执行计划 为了进一步的验证,我们选择3个版本,5.5,5.6,5.7来测试。 首先是初始化数据,这个在不同版本是一模一样的方式。 创建一个表test,插入两行数据。...for connection的新特性 如果对于explain开始有了一些感觉,那么我们再来看一个5.7中的新特性,那就是对connection的解析,也就是explain for connection
之前是一直没有听过explain这个关键字的, 最近因为项目中总是会有慢查询的一些操作, 所以请教了旁边的同事帮忙排查下原因, 看到同事用explain来分析一些sql语句, 感觉好像发现了新大陆一样。...然后使用explain进行各种查询: ?...通常全表扫描的代价是比较大的,建议创建适当的索引,通过索引检索避免全表扫描。...此外,全索引扫描(full index scan)的代价有时候是比全表扫描还要高的,除非是基于InnoDB表的主键索引扫描。...GROUP BY的列没有索引,或者GROUP BY和ORDER BY的列不一样,也需要创建临时表,建议添加适当的索引。
转自:http://blog.chinaunix.net/uid-540802-id-3419311.html explain显示了mysql如何使用索引来处理select语句以及连接表。...使用方法,在select语句前加上explain就可以了: 如: explain select surname,first_name form a,b where a.id=b.id EXPLAIN列的解释...(比ALL更好,因为索引一般小于表数据) ALL:这个连接类型对于前面的每一个记录联合进行完全扫描,这一般比较糟糕,应该尽量避免 先看一个例子: mysql> explain select * from...mysql> explain select * from t_order where order_id=100 union select * from t_order where order_id=200...mysql> explain select * from t_order where order_id=(select order_id from t_order where order_id=100)
重点是第二种用法,需要深入的了解。...先看一个例子: mysql> explain select * from t_order; +----+-------------+---------+------+---------------+-...---------+------+---------+------+--------+-------+ 1 row in set (0.03 sec) 加上extended后之后: mysql> explain...mysql> explain select * from t_order where order_id=100 union select * from t_order where order_id=200...mysql> explain select * from t_order where order_id=(select order_id from t_order where order_id=100)
explain显示了mysql如何使用索引来处理select语句以及连接表。可以帮助选择更好的索引和写出更优化的查询语句。...使用方法,在select语句前加上explain就可以了: 先看个例子 mysql> explain select * from t_order; | id | select_type | table...:子查询中的第一个SELECT DEPENDENT SUBQUERY:子查询中的第一个SELECT,取决于外面的查询 DERIVED:导出表的SELECT(FROM子句的子查询) table 输出的行所引用的表...多行之间的数据相乘可以估算要处理的行数。 filtered 显示了通过条件过滤出的行数的百分比估计值。...rows 显示MySQL认为它执行查询时必须检查的行数。多行之间的数据相乘可以估算要处理的行数。 filtered 显示了通过条件过滤出的行数的百分比估计值。
做一个积极的人 编码、改bug、提升自己 我有一个乐园,面向编程,春暖花开 文章目录 explain用法 explain结果字段的含义介绍 id select_type table type possible_keys...key key_len ref rows filtered Extra explain使用实例 总结 参考博文 拓展阅读 使用 explain 查询和分析SQl的执行记录,可以进行sql的性能优化!...explain用法 mysql> explain select * from students; +----+-------------+----------+------+--------------...不会告诉你关于触发器、存储过程的信息或用户自定义函数对查询的影响情况 EXPLAIN不考虑各种Cache EXPLAIN不能显示MySQL在执行查询时所作的优化工作 部分统计信息是估算的,并非精确值 EXPALIN...参考博文 mysql中explain用法和结果的含义 EXPLAIN 命令详解 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/121081.html原文链接:https
执行EXPLAIN不会修改执行语句涉及的数据,也不会返回执行语句的结果集。...当用户执行一个复杂的查询时,EXPLAIN可以输出多行信息,每一行使用一个id进行唯一标识。...如果“SELECT”语句中包含UNION或子查询中包含“SELECT”语句,EXPLAIN的输出将包含两行,每行有一个单独的id。...如果在一个“SELECT”语句中JOIN两张表,EXPLAIN的输出将包含两行,两行将使用相同的id。...除了提供执行计划,在8.0.18之后的版本还提供了EXPLAIN ANALYZE功能。
这是SELECT的查询序列号。 select_type 1.SIMPLE:简单的SELECT,不实用UNION或者子查询。 2.PRIMARY:最外层SELECT。 3. ...4.DEPENDENT UNION:UNION语句中的第二个SELECT,依赖于外部子查询。 5.UNION RESULT:UNION的结果。...6.SUBQUERY:子查询中的第一个SELECT。 7.DEPENDENT SUBQUERY:子查询中的第一个SELECT,取决于外面的查询。 8. ...DERIVED:导出表的SELECT(FROM子句的子查询) table 显示该语句涉及的表 type system > const > eq_ref > ref > fulltext > ref_or_null...rows 显示MySQL认为它执行查询时必须检查的行数 Extra 包含MySQL解决查询的详细信息。
什么是EXPLAIN?EXPLAIN 是 MySQL 中的一个重要命令,它用于分析 SQL 查询语句的执行计划。...EXPLAIN 的主要作用是帮助开发者理解查询语句的执行过程,以及查询优化器如何选择索引、表扫描方式等。通过分析 EXPLAIN 的输出结果,开发者可以找到查询性能的瓶颈,并对查询语句进行优化。...通过观察 EXPLAIN 的输出结果,你可以找出查询性能的瓶颈,如全表扫描、没有使用索引等。然后,你可以根据这些信息对查询语句进行优化,如添加合适的索引、调整查询条件等。为什么要使用EXPLAIN?...使用 EXPLAIN 的主要目的是分析和优化查询语句的执行计划。以下是一些使用 EXPLAIN 的重要原因:查询性能分析: 通过 EXPLAIN,你可以深入了解 MySQL 是如何执行查询的。...连接类型分析: 对于涉及多个表的查询,EXPLAIN 显示了连接类型(如嵌套循环连接、哈希连接等)。这有助于了解查询的复杂性和连接操作的开销。
人们很少做他们相信是对的事,他们做比较方便的事,然后后悔。...——鲍勃.迪伦 使用explain+SQL 作用: 表的读取顺序 数据读取操作的操作类型 哪些索引可以使用 哪些索引被实际使用 表之间的引用 每张表有多少行被优化器查询 id select_type...字句或操作表的顺序 id值越大执行优先级越高,id相同情况下执行顺序从上到下 select_type:查询的类型,主要是用于区别普通查询、联合查询、子查询等的复杂查询 simple简单的select查询...>ref>range>index>ALL system系统表 const通过索引一次就找到了,例如主键查询 explain select * from user where id = "" eq_ref...连表唯一条件 selec * from user,user_info where user.id = user_info.id ref返回匹配某个单独值的所有行 explain SELECT * FROM
我们在实际业务中经常会使用到explain,因为这里涉及到查询,下面我们来看一个例子,比如我们要查一本书的上一章或者下一章,我们的sql是这样: 查询5164这本书4054495这一章的上一章:下面的是...500多万条数据,我explain了一下: explain SELECT * FROM article WHERE (id explain一下结果,如下: explain SELECT * FROM article force index(idx_1) WHERE (id explain的解析结果,常用字段的说明: 字段:select_type 解释:select语句的类型 常见值及其说明: simple:表示简单的select,没有union和子查询 primary...小的表)进行连接的行的数目。
EXPLAIN列的解释: table:显示这一行的数据是关于哪张表的 type:这是重要的列,显示连接使用了何种类型。...possible_keys:显示可能应用在这张表中的索引。如果为空,没有可能的索引。可以为相关的域从WHERE语句中选择一个合适的语句 key: 实际使用的索引。如果为NULL,则没有使用索引。...很少的情况下,MYSQL会选择优化不足的索引。...这是使用索引的最慢的连接之一 Using filesort: 看到这个的时候,查询就需要优化了。MYSQL需要进行额外的步骤来发现如何对返回的行排序。...它根据连接类型以及存储排序键值和匹配条件的全部行的行指针来排序全部行 Using index: 列数据是从仅仅使用了索引中的信息而没有读取实际的行动的表返回的,这发生在对表的全部的请求列都是同一个索引的部分的时候
MySQL EXPLAIN详解:http://www.jianshu.com/p/ea3fc71fdc45 MySQL EXPLAIN命令是查询性能优化不可缺少的一部分,该文主要讲解explain...Extra Extra是EXPLAIN输出中另外一个很重要的列,该列显示MySQL在查询过程中的一些详细信息,MySQL查询优化器执行查询的过程中对查询计划的重要补充信息。...distinct 优化distinct操作,在找到第一匹配的元组后即停止找同样值的动作 explain的作用 我们使用explain命令来查看mysql语句的执行计划(execution plan),解释...使用explain,可以分析出需要在哪里加上索引,以及调整表的连接,以达到优化查询的目的;explain命令之后不仅可以跟select语句,也可以跟delete,insert,update,replace...用法 只需要在sql语句前加上explain就可以了,比如: +—-+————-+——-+————+——+—————+——+———+——+——–+———-+——-+ | id | select_type
MySQL Explain详解 简介 执行计划(query Execution plan) 语法 explain select * from table explain 中的列 expain出来的信息有...UNION:UNION 属于不可缓存的子查询的第二个或后一个选择 三、table 输出行引用的表的名称。...能使用哪个索引在表中找到记录,查询涉及到的字段上若存在索引,则该索引将被列出,但不一定被查询使用 该列完全独立于EXPLAIN输出所示的表的次序。...如果是这样,创造一个适当的索引并且再次用EXPLAIN检查查询 六、Key key列显示MySQL实际决定使用的键(索引) 如果没有选择索引,键是NULL。...十、Extra 该Extra列 EXPLAIN输出包含MySQL解决查询的额外信息。
explain 到底会不会执行命令着一点很多人应该是不置可否的任务,他不能执行命令,而仅仅是对语句进行评估然后反馈执行的计划。...所以这里第一点的问题是,函数尽量不要带有和表有关的操作。如果带有和表有关的操作则在explain的情况下会出现上面的问题,想象中是查看执行计划,但结果是操作了这个语句。...那么出现这样的问题,如果要进行执行计划的查看,但是又不想不运行这个函数,可以通过在执行explain 语句的情况前添加事务的方法,来规避一些风险。...同时在MYSQL 8 中的后续命令 explain analyze 命令是否也有这个问题我们看一下,从下面的图可以看出,MYSQL 8 中新添加了的 explain ananlyze 实际上在命令的安全方面和之前没有太大的变化...关于MYSQL 8 中的的 explain analyze 这个命令如果感兴趣的可以查看 https://mysqlserverteam.com/mysql-explain-analyze/ 这里有详细的说明和使用的方法
这可能是除了system和const之外最好的类型。 当主键或唯一非NULL索引的所有字段都被用作join联接时会使用此类型。 eq_r ef可用于使用’='操作符作比较的索引列。...比较的值可以是常量,也可以是使用在此表之前读取的表的列的表达式。 相对于下面的ref区别就是它使用的唯一索引,即主键或唯一索引,而ref使用的是非唯一索引或者普通索引。...4、ref 对于来自前面表的每一行,在此表的索引中可以匹配到多行。若联接只用到索引的最左前缀或索引不是主键或唯一索引时, 使用ref类型(也就是说,此联接能够匹配多行记录)。...要注意,全文索引的优先级很高,若全文索引和普通索引同时存在时,mysql不管代价,优先选择使用全文索引 6、ref_or_null 跟ref类型类似,只是增加了null值的比较。实际用的不多。...这里包含两种情况: 一种是查询使用了覆盖索引,那么它只需要扫描索引就可以获得数据,这个效率要比全表扫描要快, 12ALl 没有使用索引,全表扫描 12. extra(重要) EXplain
选择正确的匹配查询结构和数据属性的规划对执行效率是至关重要要的,所以系统包含一个复杂的规划器来试图选择好的规划。你可以使用EXPLAIN命令查看查询规划器创建的任何查询。...通常有不只一种可能的方式做这些操作,所以可能出现不同的节点类型。 EXPLAIN的输出是每个树节点显示一行,内容是基本节点类型和执行节点的消耗评估。...当然下一个问题就是规划器的评估为什么是正确的。我们可以通过EXPLAIN ANALYZE进行考察。 EXPLAIN ANALYZE 通过EXPLAIN ANALYZE可以检查规划器评估的准确性。...某些情况EXPLAIN ANALYZE会显示额外的信息,比如sort和hash节点的时候: Sql代码 ?...注意,延迟的触发器在事务结束前都不会被执行,所以EXPLAIN ANALYZE不会显示。
MySQL explain explain select/update ......官方文档:https://dev.mysql.com/doc/refman/8.0/en/explain-output.html 都是越小越好,rows * filtered explain 说明 id...select_type 查询类型 table 表 partitions 分区 type 扫描类型 possible_keys 可能索引,包含key key 实际索引 key_len 索引长度 ref 列与索引的比较...rows 扫描出的行数(估算的行数) filtered 按表条件过滤的行百分比 Extra 执行情况的描述和说明 select_type 可以不记住 SIMPLE PRIMARY UNION、DEPENDENT
explain_type中,EXTENDED和PARTITIONS 可不写,默认会输出这两列的信息。...EXPLAIN ANALYZE MySQL 8.0.18 刚刚发布,它包含一个全新的功能 EXPLAIN ANALYZE,用来分析和理解查询如何执行。...这项新功能建立在常规的 EXPLAIN 基础之上,可以看作是 MySQL 8.0 之前添加的 EXPLAIN FORMAT = TREE 的扩展(8.0.17)。...EXPLAIN 除了输出查询计划和估计成本之外,EXPLAIN ANALYZE 还会输出执行计划中各个迭代器的实际成本。...月的数据(上面 EXPLAIN ANALYZE 输出中的第 13 行)。
领取专属 10元无门槛券
手把手带您无忧上云