首页
学习
活动
专区
圈层
工具
发布

MySQL EXPLAIN SQL 输出信息描述

EXPLAIN语句能够被用于获取一些关于SQL执行时的相关信息,比如表的连接顺序,对表的方式方式等等。...通过对该相关信息进行进一步的分析,我们 可以通过对表添加适当的索引,以及优化连接顺序,使用提示等等手段来达到使SQL高效运行的目的。本文描述了EXPLAIN的用法并给出了相关示例。...一、EXPLAIN概述 EXPLAIN 语句主要是用于解析SQL执行计划,通过分析执行计划采取适当的优化方式提高SQL运行的效率。...EXPLAIN EXTENDED支持一些额外的执行计划相关的信息 EXPLAIN PARTITIONS支持基于分区表查询执行计划的相关信息 二、EXPLAIN输出列描述 -- 下面通过示例来展示EXPLAIN...,即原来的1=1的条件被去掉 -- 对于复杂的SQL语句我们可以通过该方式获得一个比较清晰的真正被执行的SQL语句 四、EXPLAIN PARTITIONS示例 (root@localhost) [sakila

1.3K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    用 Explain 命令分析 MySQL 的 SQL 执行

    在上一篇文章《MySQL常见加锁场景分析》中,我们聊到行锁是加在索引上的,但是复杂的 SQL 往往包含多个条件,涉及多个索引,找出 SQL 执行时使用了哪些索引对分析加锁场景至关重要。...比如下面这样的 SQL: ? 其中 id 和 val 都是索引,那么执行时使用到了哪些索引,加了哪些锁呢?为此,我们需要使用 explain 来获取 MySQL 执行这条 SQL 的执行计划。...下面,我们依次介绍 explain 中相关输出参数,并以实际例子解释这些参数的含义。...type 表的连接类型,其性能由高到低排列为 system,const,eq_ref,ref,range,index 和 all。 system 表示表只有一行记录,相当于系统表。...distinct 发现第一个匹配后,停止为当前的行组合搜索更多的行 后记 通过 explain 了解到 SQL 的执行计划后,我们不仅可以了解 SQL 执行时使用的索引,判断加锁场景,还可以针对其他信息对

    2.1K11

    用 Explain 命令分析 MySQL 的 SQL 执行

    在上一篇文章《MySQL常见加锁场景分析》中,我们聊到行锁是加在索引上的,但是复杂的 SQL 往往包含多个条件,涉及多个索引,找出 SQL 执行时使用了哪些索引对分析加锁场景至关重要。...为此,我们需要使用 explain 来获取 MySQL 执行这条 SQL 的执行计划。 什么是执行计划呢?...下面,我们依次介绍 explain 中相关输出参数,并以实际例子解释这些参数的含义。...system 表示表只有一行记录,相当于系统表。如下图所示,因为 from 的子查询派生的表只有一行数据,所以 primary 的表连接类型为 system。...[temporary] distinct 发现第一个匹配后,停止为当前的行组合搜索更多的行 后记 通过 explain 了解到 SQL 的执行计划后,我们不仅可以了解 SQL 执行时使用的索引,判断加锁场景

    1.8K00

    sql server 与mysql的区别_sql server的优缺点

    MySQL支持enum,和set类型,SQL Server不支持 MySQL不支持nchar,nvarchar,ntext类型 MySQL的递增语句是AUTO_INCREMENT,而MS SQL...IF EXISTS cdb_forums; MySQL支持无符号型的整数,那么比不支持无符号型的MS SQL就能多出一倍的最大数 存储 MySQL不支持在MS SQL里面使用非常方便的varchar...MySQL的存储过程只是出现在最新的版本中,稳定性和性能可能不如MS SQL。 同样的负载压力,MySQL要消耗更少的CPU和内存,MS SQL的确是很耗资源。...,limit不同与SQLServer,它可 以规定范围 limit a,b——范围a-b SQL SERVER : select top 8 * from table1 MYSQL: select *...41. (19) MySQL视图的FROM子句不允许存在子查询,因此对于SQL Server中FROM 子句带有子查询的视图,需要手工进行迁移。

    3.6K20

    MySQL——通过EXPLAIN分析SQL的执行计划

    在MySQL中,我们可以通过EXPLAIN命令获取MySQL如何执行SELECT语句的信息,包括在SELECT语句执行过程中表如何连接和连接的顺序。...中的第二个或者后面的查询语句SUBQUERY子查询中的第一个 table:输出结果集的表(表别名) type:表示MySQL在表中找到所需行的方式,或者叫访问类型。...,索引全扫描,MySQL遍历整个索引来查询匹配行,并不会扫描表 一般是查询的字段都有索引的查询语句 EXPLAIN SELECT store_id FROM customer; type=range...=20; 注意这种情况下比较的字段是需要加索引的,如果没有索引,则MySQL会进行全表扫描,如下面这种情况,create_date字段没有加索引: EXPLAIN SELECT * FROM customer...rows: 扫描行的数量 filtered: 存储引擎返回的数据在server层过滤后,剩下多少满足查询的记录数量的比例(百分比) Extra: 执行情况的说明和描述,包含不适合在其他列中显示但是对执行计划非常重要的额外信息

    76340

    MySQL——通过EXPLAIN分析SQL的执行计划

    在MySQL中,我们可以通过EXPLAIN命令获取MySQL如何执行SELECT语句的信息,包括在SELECT语句执行过程中表如何连接和连接的顺序。 ?...UNION UNION中的第二个或者后面的查询语句 SUBQUERY 子查询中的第一个 table:输出结果集的表(表别名) type:表示MySQL在表中找到所需行的方式,或者叫访问类型。...2.type=index,索引全扫描,MySQL遍历整个索引来查询匹配行,并不会扫描表 一般是查询的字段都有索引的查询语句 EXPLAIN SELECT store_id FROM customer;...注意这种情况下比较的字段是需要加索引的,如果没有索引,则MySQL会进行全表扫描,如下面这种情况,create_date字段没有加索引: EXPLAIN SELECT*FROM customer WHERE...: 存储引擎返回的数据在server层过滤后,剩下多少满足查询的记录数量的比例(百分比) Extra: 执行情况的说明和描述,包含不适合在其他列中显示但是对执行计划非常重要的额外信息 最主要的有以下几种

    96520

    SQL优化 MySQL版 -分析explain SQL执行计划

    ; course:课程表 teacher:教师表 teacherCarid:教师证表 现在我把这三张表连起来查,查询条件:查询课程编号为2或教师证编号为3点老师信息; 通过这个例子,我们就可以把explain...里面的参数一个一个的讲讲: 首先这个条件的主干是查询老师信息; sql语句:select t.* From teacher t INNER JOIN course c INNER JOIN teachercarid...我们关心的是在它前面加explain: explain select t.* From teacher t INNER JOIN course c INNER JOIN teachercarid te...te 是我们的教师证表 t 就是教室表 c 是课程表 由此可见,我们编写的SQL语句它底层是先执行教师证表的,然后执行教室表,最后再执行课程表; 那这是为什么呢?...PRIMARY:包含查询SQL中的子查询(最外层) SUBQUERY:包含子查询SQL中的子查询(非最外层) Simple:简单查询(一个SQL语句里面不包含子查询,union)都是简单查询 derived

    87110

    神奇的 SQL 之 MySQL 性能分析神器 → EXPLAIN,SQL 起飞的基石!

    她:好的,谢谢!   公司没有专门的搜索服务,都是直接从 MySQL 查询,做简单的数据处理后返回给页面,慢的原因肯定就是 SQL 查询了。...然后我用 EXPLAIN 看了下这条 SQL 的执行计划,找到了慢的原因,具体原因后面揭晓(谁让你不是猪脚!)...EXPLAIN 是什么   它是 MySQL 的一个命令,用来查看 SQL 的执行计划(SQL 如何执行),根据其输出结果,我们能够知道以下信息:表的读取顺序,数据读取类型,哪些索引可以使用,哪些索引实际使用了...,表之间的连接类型,每张表有多少行被优化器查询等信息,根据这些信息,我们可以找出 SQL 慢的原因,并做针对性的优化   MySQL 5.6 之前的版本,EXPLAIN 只能用于查看 SELECT 的执行计划...EXPLAIN 输出格式详解   EXPLAIN 的输出字段虽然有点多,但常关注的就那么几个,但楼主秉着负责的态度,都给大家讲一下,需要重点关注的字段,楼主也会标明滴   EXPLAIN 支持的 SQL

    71630

    MySQL高级--性能优化之Explain分析SQL

    1 Explain查看执行计划 Explain + SQL : 查看执行计划包含的信息。...(在正常的SQL语句之间加Explain查看执行计划信息) 3.5.1 执行计划包含的查询信息 不加\G横向显示 加\G纵向展示 1.2 表的读取顺序 id: select查询的序列号(是一组数字...额外属性 Using filesort: 说明MySQL会对数据使用一个外部的索引排序,而不是按照表内的索引顺序进行读取。MySQL中无法利用索引完成的排序操作称之为“文件排序”。...这里创建的是一个聚合索引(col1,col2,col3),第二个SQL没有提示使用文件内部排序是因为使用列按照了索引的顺序(col1->col2->col3),但是第一个SQL没有使用到col2,产生了一个断层...这里创建的是一个聚合索引(col1,col2),第二个SQL在 GROUP BY 的时候没有按照聚合索引的顺序,导致排序和分组都会提示相应的错误,一定要按照索引的顺序进行分组和排序。

    1.2K30

    MySQL如何通过EXPLAIN分析SQL的执行计划

    在MySQL中,我们可以通过EXPLAIN命令获取MySQL如何执行SELECT语句的信息,包括在SELECT语句执行过程中表如何连接和连接的顺序。...主查询,即外层的查询 UNION UNION中的第二个或者后面的查询语句 SUBQUERY 子查询中的第一个 table:输出结果集的表(表别名) type:表示MySQL在表中找到所需行的方式...=index,索引全扫描,MySQL遍历整个索引来查询匹配行,并不会扫描表 一般是查询的字段都有索引的查询语句 EXPLAIN SELECT store_id FROM customer;...<=20; 注意这种情况下比较的字段是需要加索引的,如果没有索引,则MySQL会进行全表扫描,如下面这种情况,create_date字段没有加索引: EXPLAIN SELECT * FROM...rows: 扫描行的数量 filtered: 存储引擎返回的数据在server层过滤后,剩下多少满足查询的记录数量的比例(百分比) Extra: 执行情况的说明和描述,包含不适合在其他列中显示但是对执行计划非常重要的额外信息

    71110

    简单了解SQL性能优化工具MySql Explain

    写在前面 MySql Explain是对SQL进行性能优化不可或缺的工具,通过他我们可以对SQL进行一定的分析和性能优化,降低线上业务因慢查询造成的性能损失。...了解Explain 执行计划依赖于表,列,索引等细节和where中的条件,mysql优化器利用多种技术来有效的执行一条sql中的查询语句,比如在大表中的一个查询可以不通过全表扫描来完成。...一个涉及到多表的join操作可以避免比较每种的组合情况,优化器选择最优的效果查询对一个集合进行操作,通过explain语句可以获取mysql如何执行语句的信息。...输出信息 explain对select语句操作返回一行输出信息,表示的顺序是mysql处理语句时实际读取表的顺序。 mysql通过嵌套循环方式解决所有join操作。...Extra Extra是EXPLAIN输出中另外一个很重要的列,该列显示MySQL在查询过程中的一些详细信息,MySQL查询优化器执行查询的过程中对查询计划的重要补充信息。

    1.8K20

    mysql的explain详解

    我们在实际业务中经常会使用到explain,因为这里涉及到查询,下面我们来看一个例子,比如我们要查一本书的上一章或者下一章,我们的sql是这样: 查询5164这本书4054495这一章的上一章:下面的是...article的这个表里面有500多万条数据,我explain了一下: explain SELECT * FROM article WHERE (id sql,重新explain一下结果,如下: explain SELECT * FROM article force index(idx_1) WHERE (id mysql的查询,更多是注重扫描查询的行数,以及是否使用到索引,我常看的最重要的是扫描的rows字段,然后就key字段,看下extra的属性,这样就基本能解决问题了。...using temporary:mysql需要创建一张临时表来保存中间结果。也就是说,需要先把数据放到临时表中,然后从临时表中获取需要的数据。

    56130

    mysql和sqlserver的区别_sql server和MySQL

    AUTO_INCREMENT,而sql server是identity(1,1) 4、sql server默认导出表创建语句的默认值表示是((0)),而在mysql里面是不允许带两括号的 5、mysql...即使我们逐渐见证了从SQL向NoSQL的转变,前者仍然是更具主导地位的存在。这意味着现在是学习MySQL或SQL Server的好时机。...在本指南中,我们将简要介绍MySQL和SQL Server的内容。我们将找出MySQL和SQL Server之间的区别,并帮助您选择最适合您需求的产品。...MySQL和SQL Server之间的主要区别 现在我们已经概述了这些系统是什么,让我们看看MySQL和SQL Server之间的几个关键偏差: 环境 如前所述,SQL Server最适合使用.NET,...成本 这是SQL Server变得不那么有吸引力的地方,MySQL获得了重点。

    4.2K30

    MySQL EXPLAIN 的使用

    EXPLAIN列的解释: table:显示这一行的数据是关于哪张表的 type:这是重要的列,显示连接使用了何种类型。...很少的情况下,MYSQL会选择优化不足的索引。...在不损失精确性的情况下,长度越短越好 ref:显示索引的哪一列被使用了,如果可能的话,是一个常数 rows:MYSQL认为必须检查的用来返回请求数据的行数 Extra:关于MYSQL如何解析查询的额外信息...:一旦MYSQL找到了与行相联合匹配的行,就不再搜索了 Not exists: MYSQL优化了LEFT JOIN,一旦它找到了匹配LEFT JOIN标准的行,就不再搜索了 Range checked...因为只有一行,这个值实际就是常数,因为MYSQL先读这个值然后把它当做常数来对待 eq_ref:在连接中,MYSQL在查询时,从前面的表中,对每一个记录的联合都从表中读取一个记录,它在查询使用了索引为主键或惟一键的全部时使用

    61710

    SQL优化 MySQL版 -分析explain SQL执行计划与Extra

    注:此文章必须有一定的MySQL基础,或观看执行计划入门篇传送门: https://www.linuxidc.com/Linux/2019-03/157264.htm 终于总结到哦SQK执行计划的最后一个知识点了...: Extra Extra有以下几个值,它们都非常重要,它们表示你的SQL语句的最终性能,以下将介绍它的几种值,每个值都代表你的SQL语句的缺陷: 1.Using filesort 主要出现在 order...table test01 add a_b_c_index (a,b,c); 显示所有索引:show index from 表名 执行结果: 首先a b c 这三个字段我都加了索引,然后我执行以下语句: explain...,就是索引覆盖 using index; 举例: 这个时候我们表中有一个复合索引,a b c均为索引列: 现在我们编写一条SQL语句: 原因很简单,我需要查询的列分别是 a b 但是a b这两个列都在索引中...where age = ...; 这条SQL语句很显然,age在索引里面,但是name 不在索引里,这种情况就必须回原表,并且会显示Using where; SQL语句:EXPLAIN SELECT

    1K10

    sql server数据迁移到mysql

    前段时间,要讲项目使用的sql server数据迁移到mysql....说一下方法步骤 一、下载SQLyog SQLyog的下载地址(自行搜索) 二、安装完之后打开SQLyog 连接自己的mysql数据库,以及新建要迁移的数据库名 三、开始迁移数据库 1).点击新建的数据库右键...5).选择SQL Serve image.png 6).输入文件名称,点击完成,及会让你输入服务器地址 image.png 7).输入服务器地址 image.png 8).选择使用用户名密码验证...image.png 9).更改自己要迁移的数据库,点击下一步即完成 image.png 10).测试数据源是否连接成功 image.png 11).选择自己刚刚新建的dsn文件,并且输入用户名密码...image.png 12).选择要导入的mysql数据库 image.png 13).选择自己要导入的表,之后点入下一步即可 image.png 14).完成迁移 image.png

    2.2K00

    Mysql Explain的主要字段

    这个是经典面试题了,所以掌握还是很有必要的哦! 我来解释下含义哦: 再来分别介绍每一个: 1. id  SQL查询中的序列号。        ...比较的值可以是常量,也可以是使用在此表之前读取的表的列的表达式。 相对于下面的ref区别就是它使用的唯一索引,即主键或唯一索引,而ref使用的是非唯一索引或者普通索引。...4、ref 对于来自前面表的每一行,在此表的索引中可以匹配到多行。若联接只用到索引的最左前缀或索引不是主键或唯一索引时, 使用ref类型(也就是说,此联接能够匹配多行记录)。...要注意,全文索引的优先级很高,若全文索引和普通索引同时存在时,mysql不管代价,优先选择使用全文索引 6、ref_or_null 跟ref类型类似,只是增加了null值的比较。实际用的不多。...这里包含两种情况: 一种是查询使用了覆盖索引,那么它只需要扫描索引就可以获得数据,这个效率要比全表扫描要快, 12ALl 没有使用索引,全表扫描 12. extra(重要)     EXplain

    1.8K20

    关于Mysql的explain工具

    当你运行一条sql执行很慢的时候,可以使用explain sql,"explain"相当于mysql中的优化器,可以很好的分析性能瓶颈。 ?...如上图,就是explain的执行效果,查询出很多字段,我们主要关注其中比较重要的几个 type:访问的类型,性能从高到低NULL>system>const>eq_ref>ref>fulltext>ref_or_null...unique_subquery>index_subquery>range>index>ALL const:通过索引一次就找到,用到了主键或唯一索引,匹配一行所以很快 index_merge:索引合并的优化方法...range:使用指定范围的行语句出现between、、in等 index:只遍历索引树查询 all:全表查询 key:使用到的索引 rows:找到结果所需要读取的行 官网的解释:https...://dev.mysql.com/doc/refman/8.0/en/explain-output.html#explain-join-types

    49730
    领券