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

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 的表,包含 id、name 和 email 字段。以下是一个简单的查询:

代码语言: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.2K21
  • 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执行计划各个属性的含义,通常面试中比较喜欢问着方面问题,如果是个人学习,更推荐先系统学习一下数据库查询优化这块内容相关知识。

    1.1K50

    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

    1.1K30

    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.4K20

    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详解

    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 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.9K20

    MySQL - EXPLAIN详解

    概述 EXPLAIN: 为 SELECT语句中使用到的每个表返回一条信息。它按照MySQL在处理语句时读取它们的顺序列出这些表。MySQL使用循环嵌套算法解析所有连接。...意味着MySQL从第一个表中读取一行,然后在第二个表,第三个表中找到匹配的行,等等。...QEP: SQL语句的查询执行计划 注意: 在以前版本的MySQL中,使用 EXPLAIN PARTITIONS 与 EXPLAIN EXTENDED 来生成分区和扩展信息 。...目前为止这些语法仍然是向后兼容的,但未来 MySQL会将它们排除出 EXPLAIN语法,因为现在 EXPLAIN默认就会输出分区和扩展的相关信息。...(5.7才有) possiblekeys(JSON名: possiblekeys) 表示MySQL查找表中的行时可选择的索引。请注意,此列完全独立于 EXPLAIN输出中显示的顺序。

    1.9K21

    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需要创建一个临时表来容纳结果。

    1.1K100

    mysql中的explain居然也会骗人

    直接甩张图,大家可以猜一下这个sql的执行时间 先提一嘴,bm表总共77条数据,而且没有大字段,字段数量也不多 explain中影响sql的关键 在 EXPLAIN 语句的输出中,影响 SQL 执行时间的关键项主要有以下几个...: type(连接类型): 这是执行计划中最重要的列之一,表示 MySQL 用于查找行的连接类型。...filtered(过滤率): 表示 MySQL 估计通过条件过滤后返回的行数百分比。值越低,表示更多的行被过滤,通常意味着更高效的查询。...数据库配置文件中的参数 缓存和缓冲区大小: innodb_buffer_pool_size (MySQL/InnoDB): 用于缓存数据和索引的缓冲池大小。...where,也不错了 possible_keys与key都存在值 最后一项filtered表现不行,但是影响不会很大 所以这个sql应该是毫秒级别的,也就是肯定是一秒之内 可是结果为下图 所以:explain

    48610

    Mysql EXPLAIN 实战

    EXPLAIN可以帮助开发人员分析SQL问题,EXPLAIN显示了MySQL如何使用使用SQL执行计划,可以帮 助开发人员写出更优化的查询语句。...# 具体使用 EXPLAIN SELECT * FROM XXtable 查询的结果有: 1) id:SELECT识别符。这是SELECT查询序列号。...subquery:子查询中的第一个select。 dependent subquery:子查询中的第一个select,取决于外面的查询。...const:数据表最多只有一个匹配行,因为只匹配一行数据,所以很快 eq_ref:mysql手册是这样说的:”对于每个来自于前面的表的行组合,从该表中读取一行。...Using fifilesort:MySQL需要额外的一次传递,以找出如何按排序顺序检索行。 Using index:从只使用索引树中的信息而不需要进一步搜索读取实际的行来检索表中的列信息。

    1.6K10
    领券