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

mysql中explain是什么

EXPLAIN 是 MySQL 中的一个命令,用于分析 SQL 查询的执行计划。通过 EXPLAIN,开发人员可以查看 MySQL 如何执行特定的查询,从而了解查询的性能并进行优化。

基础概念

当执行一个 SQL 查询时,MySQL 会首先分析这个查询,然后生成一个执行计划。这个执行计划决定了 MySQL 如何访问表中的数据,以及如何连接这些表。EXPLAIN 命令就是用来查看这个执行计划的。

相关优势

  • 性能调优:通过查看执行计划,可以发现查询中的瓶颈,从而进行针对性的优化。
  • 理解查询执行过程:对于复杂的查询,EXPLAIN 可以帮助理解 MySQL 是如何处理这些查询的。

类型

EXPLAIN 输出的结果包含多个字段,其中一些重要的字段包括:

  • id:查询的标识符。
  • select_type:查询的类型(例如,简单查询、子查询等)。
  • table:输出结果集的表。
  • type:连接类型,表示 MySQL 如何连接表(例如,全表扫描、索引扫描等)。
  • possible_keys:可能使用的索引。
  • key:实际使用的索引。
  • rows:预计扫描的行数。

应用场景

当你遇到以下情况时,可以使用 EXPLAIN

  • 查询运行缓慢。
  • 查询结果不准确。
  • 需要优化查询性能。

常见问题及解决方法

问题:为什么我的查询运行缓慢?

  • 原因:可能是由于全表扫描、没有使用索引或者索引选择不当等原因导致的。
  • 解决方法:使用 EXPLAIN 查看查询的执行计划,找出性能瓶颈。例如,如果发现某个查询使用了全表扫描,可以考虑添加索引来优化查询。

示例代码

假设有一个名为 users 的表,包含 idnameemail 字段。以下是一个简单的查询:

代码语言:txt
复制
EXPLAIN SELECT * FROM users WHERE email = 'example@example.com';

通过查看 EXPLAIN 的输出结果,可以了解这个查询是如何执行的,以及是否使用了索引。

参考链接

通过理解和利用 EXPLAIN 命令,你可以更好地优化 MySQL 查询,提高数据库性能。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

谈谈MYSQL中的Explain

#规定慢 SQL 的查询阙值,超过这个值将会被记录到慢查询文件中,单位:秒long_query_time=3#慢查询日志以文件的形式输出log_output=FILE基本介绍 Explain被称为执行计划...,在语句之前增加 explain 关键字,MySQL 会在查询上设置一个标记,模拟MySQL优化器来执行SQL语句,执行查询时,会返回执行计划的信息,并不执行这条SQL。...(注意,如果 from 中包含子查询,仍会执行该子查询,将结果放入临时表中)。Explain结果是基于数据表中现有数据的。...Explain结果与MySQL版本有很大的关系,不同版本的优化器的优化策略不同。...语法:explain sql语句示例:mysql> explain select * from actor;+----+-------------+-------+------+------------

1.1K21
  • mysql explain ref列_MySQL EXPLAIN详解

    MySQL EXPLAIN详解:http://www.jianshu.com/p/ea3fc71fdc45 MySQL EXPLAIN命令是查询性能优化不可缺少的一部分,该文主要讲解explain...决定采用哪个索引来优化查询 key_len 显示mysql在索引里使用的字节数 ref 显示了之前的表在key列记录的索引中查找值所用的列或常量 rows 为了找到所需的行而需要读取的行数,估算值,不精确...结果中的下一列 当有union result的时候,表名是union 1,2等的形式,1,2表示参与union的query id 注意:MySQL对待这些表和普通表一样,但是这些“临时表”是没有任何索引的...要想强制MySQL使用或忽视possible_keys列中的索引,在查询中使用FORCE INDEX、USE INDEX或者IGNORE INDEX。...Extra Extra是EXPLAIN输出中另外一个很重要的列,该列显示MySQL在查询过程中的一些详细信息,MySQL查询优化器执行查询的过程中对查询计划的重要补充信息。

    5.3K60

    mysql explain ref null_MySQL Explain详解

    MySQL Explain详解 简介 执行计划(query Execution plan) 语法 explain select * from table explain 中的列 expain出来的信息有...使用索引中的读取执行全表扫描,以按索引顺序查找数据行。 Uses index没有出现在 Extra列中。当查询仅使用属于单个索引的列时,MySQL可以使用此连接类型。...通常,您可以ALL通过添加基于常量值或早期表中的列值从表中启用行检索的索引来避免 五、possible_keys 该possible_keys列指示MySQL可以选择在此表中查找行的索引,指出MySQL...如果是这样,创造一个适当的索引并且再次用EXPLAIN检查查询 六、Key key列显示MySQL实际决定使用的键(索引) 如果没有选择索引,键是NULL。...根据表统计信息及索引选用情况,估算的找到所需的记录所需要读取的行数 十、Extra 该Extra列 EXPLAIN输出包含MySQL解决查询的额外信息。

    2.7K40

    MySQL中explain的结果​字段介绍

    MySQL中explain的结果字段介绍(二) 昨天说完了执行计划的前四个字段,今天说说后面几个字段吧。...我们看看explain的基本语法和输出内容: mysql ::>>explain select ; +----+-------------+-------+------+---------------+...Const const值就是当我们根据主键或者唯一二级索引列与常数进行等值匹配的时候,对表的访问方法就是const,为了演示效果,我们给表中多插入了几条数据,如下: mysql:yeyztest...子查询中使用了test_explain表中的普通索引字段a_key_var和test_explain表中的主键id字段进行等值匹配,外层的where条件中我们使用的是test_explain的主键id值进行...index_subquery 这个和上面一样,但是in条件中的子查询使用的是a_key_var普通索引字段,而不是id字段: mysql:yeyztest 18:53:30>>explain select

    10.1K10

    Mysql 中令人稀里糊涂的Explain

    Mysql 中令人稀里糊涂的Explain 本文想和大家来聊聊Mysql中的执行计划,一条SQL语句经过了查询优化器模块分析后,会得到一个执行计划,通过这个执行计划,我们可以知道该条SQL语句具体采用的多表连接顺序是什么...,对于每个表具体采用的访问方法是什么 . . ....我们可以使用Mysql提供的Explain命令来获取一条SQL语句的具体执行计划,本文的重点在理解Mysql执行计划中各个选项含义。...这是因为MySQL会在包含GROUP BY子句的查询中默认添加上ORDER BY子句,也就是说上述查询其实和下边这个查询等价: EXPLAIN SELECT common_field, COUNT(*)...---- 小结 本文简单介绍了一下Mysql中Explain执行计划各个属性的含义,通常面试中比较喜欢问着方面问题,如果是个人学习,更推荐先系统学习一下数据库查询优化这块内容相关知识。

    96550

    【mysql】explain介绍

    我们对系统性能分析的一部分就是数据库的分析,比如定位到查询速度慢的SQL,我们想对其进行优化,但是从哪些方面进行优化,就需要使用explain来查看select语句的执行计划。...explain关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理SQL语句的,对我们的查询语句进行分析,提升性能。...使用expain关键字,我们可以分析到的信息有: 表的读取顺序 数据读取操作的操作类型 哪些索引可以使用 哪些索引被实际使用 表之间的引用 每张表有多少行被优化器查询 使用方法:explain + SQL...列表中包含的子查询被标记为DERIVED(衍生),MySQL会递归执行这些子查询,把结果放在临时表中 UNION 若第二个SELECT出现在UNION之后,则被标记为UNION:若UNION包含在...如将主键置于where列表中,MySQL就能将该查询转换为一个常量。

    73930

    MySQL EXPLAIN ANALYZE

    Ryeng 译:徐轶韬 MySQL8.0.18刚刚发布,它包含一个全新的功能EXPLAIN ANALYZE,用来分析和理解查询如何执行。 EXPLAIN ANALYZE是什么?...EXPLAIN ANALYZE是一个用于查询的分析工具,它向用户显示MySQL在查询上花费的时间以及原因。它将产生查询计划,并对其进行检测和执行,同时计算行数并度量执行计划中不同点上花费的时间。...这项新功能建立在常规的EXPLAIN基础之上,可以看作是MySQL 8.0之前添加的EXPLAIN FORMAT = TREE的扩展。...该信息也会在EXPLAIN FORMAT = TREE输出中。 我们将从最后面的循环数开始。此过滤迭代器的循环数为2。这是什么意思?要了解此数字,我们必须查看查询计划中过滤迭代器上方的内容。...EXPLAIN ANALYZE是MySQL查询分析工具里面的一个新工具: 检查查询计划:EXPLAIN FORMAT = TREE 分析查询执行:EXPLAIN ANALYZE 了解计划选择:Optimizer

    1.8K20

    MySQL explain extra

    MySQL执行计划中,extra可以展示执行的一些细节,比如索引下推,覆盖索引,排序等信息,为索引优化提供了更完整的信息 常见的extra extra有很多,这里只列出了最常见的几种类型 Using...where: 查询条件中 Using index condition: 索引下推(Index Condition Pushdown) Using filesort:Server层需要做额外的排序操作...,需要优化,让排序使用到索引 no matching row in const table:唯一索引(包括主键)查询不到数据 Using index:覆盖索引,查询的行都在对应的索引中 Using...因为接近的索引,可能在相同的页上 Using temporary:使用了临时表,需要优化 疑问 条件中只有一个条件,是索引的第一个字段,也可能Using index condition,这个就太不明白了.../doc/refman/8.0/en/explain-output.html#explain-extra-information Mysql-explain之Using temporary和Using

    1K30

    MySQL Explain详解

    MySQL Explain详解 ?...上图是使用Explain分析的一条sql语句,下面我们来看一下各个字段的具体含义是什么 expain出来的信息有10列,分别是id、select_type、table、type、possible_keys...如将主键置于where列表中,MySQL就能将该查询转换为一个常量,system是const类型的特例,当查询的表只有一行的情况下,使用system NULL: MySQL在优化过程中分解语句,执行时甚至不用访问表或索引...五、possible_keys 指出MySQL能使用哪个索引在表中找到记录,查询涉及到的字段上若存在索引,则该索引将被列出,但不一定被查询使用 该列完全独立于EXPLAIN输出所示的表的次序。...如果是这样,创造一个适当的索引并且再次用EXPLAIN检查查询 六、Key key列显示MySQL实际决定使用的键(索引) 如果没有选择索引,键是NULL。

    1.6K10

    Mysql Explain 详解

    在日常工作中,我们会有时会开慢查询去记录一些执行时间比较久的SQL语句,找出这些SQL语句并不意味着完事了,些时我们常常用到explain这个命令来查看一个这些SQL语句的执行计划,查看该SQL语句有没有使用上了索引...(QEP:sql生成一个执行计划query Execution plan) mysql> explain select * from servers; +----+-------------+-----...五、possible_keys 指出MySQL能使用哪个索引在表中找到记录,查询涉及到的字段上若存在索引,则该索引将被列出,但不一定被查询使用 该列完全独立于EXPLAIN输出所示的表的次序。...如果是这样,创造一个适当的索引并且再次用EXPLAIN检查查询 六、Key key列显示MySQL实际决定使用的键(索引) 如果没有选择索引,键是NULL。...• EXPLAIN不考虑各种Cache • EXPLAIN不能显示MySQL在执行查询时所作的优化工作 • 部分统计信息是估算的,并非精确值 • EXPALIN只能解释SELECT操作,其他操作要重写为

    1.5K20

    mysql explain 详解

    准备一条复杂一点的语句 字段描述 id  mysql查询序列号 可以认定为mysql语句的执行顺序 1:如果是同一组查询,id序号则一致,顺序从上到下 2:如果是子查询,则序号自增,执行顺序从小到大...它替换子查询中的索引,但它适用于以下形式的子查询中的非唯一索引:(value IN (SELECT key_column FROM single_table WHERE some_expr)) range...输出行中的键列指示使用哪个索引。...matching min/max row                  当查询列表处有 MIN 或者 MAX 聚集函数,但是并没有符合 WHERE 子句中的搜索条件的记录时,将会提示该额外信息( EXPLAIN...如果 WHERE 子句中包含要求被驱动表的某个列等于 NULL 值的搜索条件,而且那个列又是不允许存储 NULL 值的,那么在该表的执行计划的 Extra 列就会提示 Not exists 额外信息( EXPLAIN

    1.3K20

    mysql explain详解

    对于经常使用mysql的兄弟们,对explain一定不会陌生。当你在一条SELECT语句前放上关键词EXPLAIN,MySQL解释它将如何处理SELECT,提供有关表如何联合和以什么次序的信息。...官方的关于explain的文档在http://dev.mysql.com/doc/refman/5.1/en/using-explain.html(英文),本文可作为官方文献的不完整通俗读物。...举例 mysql> explain select * from event; +----+-------------+-------+------+---------------+------+----...rows 这个数表示mysql要遍历多少数据才能找到,在innodb上是不准确的。 Extra 如果是Only index,这意味着信息只用索引树中的信息检索出的,这比扫描整个表要快。...Using index 从只使用索引树中的信息而不需要进一步搜索读取实际的行来检索表中的列信息。 Using temporary 为了解决查询,MySQL需要创建一个临时表来容纳结果。

    1K100
    领券