首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

mysql explain是什么意思

mysql explain 是 MySQL 数据库中的一个命令,用于分析 SQL 查询的执行计划。通过执行 EXPLAIN 命令,可以查看 MySQL 如何处理 SQL 语句,从而了解查询的性能和优化方向。

基础概念

EXPLAIN 命令会返回一个表格,其中包含了 MySQL 优化器如何执行查询的信息。这个表格包括了以下列:

  • id:查询的标识符,用于区分查询中的各个部分。
  • select_type:查询的类型,如 SIMPLEPRIMARYSUBQUERY 等。
  • table:输出结果集的表。
  • type:连接类型,如 ALLindexrangeref 等。
  • possible_keys:可能使用的索引。
  • key:实际使用的索引。
  • key_len:使用的索引的长度。
  • ref:显示了哪些列或常量被用作索引查找的条件。
  • rows:MySQL 预计需要检查的行数。
  • Extra:包含不适合在其他列中显示的额外信息,如 Using whereUsing index 等。

相关优势

  • 性能优化:通过 EXPLAIN 可以了解查询的执行计划,从而找到性能瓶颈并进行优化。
  • 索引使用情况:可以查看哪些索引被使用,哪些没有被使用,从而决定是否需要添加或删除索引。
  • 查询类型分析:可以分析查询的类型,如子查询、联合查询等,从而优化查询结构。

应用场景

  • 查询性能调优:当某个查询执行时间过长时,可以使用 EXPLAIN 分析其执行计划,找出问题所在。
  • 索引优化:通过分析 possible_keyskey 列,可以确定是否需要添加或删除索引。
  • 查询重构:通过分析 select_typeExtra 列,可以发现查询中的复杂部分,从而进行重构。

示例

假设有一个简单的查询:

代码语言:txt
复制
EXPLAIN SELECT * FROM users WHERE age > 30;

执行上述命令后,MySQL 会返回类似以下的表格:

| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | |----|-------------|-------|------|---------------|-----|---------|-----|------|-------| | 1 | SIMPLE | users | range| age | age | 4 | NULL| 1000 | Using where |

通过这个表格,可以了解到:

  • 查询类型是 SIMPLE
  • 使用了 users 表。
  • 连接类型是 range
  • 可能使用了 age 索引,并且实际也使用了 age 索引。
  • 预计需要检查 1000 行数据。
  • 使用了 WHERE 子句进行过滤。

常见问题及解决方法

  1. 全表扫描(type = ALL)
    • 原因:没有合适的索引,MySQL 需要扫描整个表。
    • 解决方法:添加合适的索引,如 CREATE INDEX idx_age ON users(age);
  • 索引未被使用(key = NULL)
    • 原因:查询条件中没有使用到索引列,或者索引列的值分布不均匀。
    • 解决方法:检查查询条件,确保使用了索引列;或者重新设计索引。
  • 行数过多(rows 很大)
    • 原因:查询条件不够精确,导致需要检查的行数过多。
    • 解决方法:优化查询条件,使用更精确的条件进行过滤。

通过 EXPLAIN 命令,可以有效地分析和优化 SQL 查询,提高数据库的性能。更多详细信息和示例,可以参考 MySQL 官方文档:https://dev.mysql.com/doc/refman/8.0/en/explain-output.html

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

相关·内容

mysql explain ref列_MySQL EXPLAIN详解

MySQL EXPLAIN详解:http://www.jianshu.com/p/ea3fc71fdc45 MySQL EXPLAIN命令是查询性能优化不可缺少的一部分,该文主要讲解explain...key key列显示MySQL实际决定使用的键(索引)。...Extra Extra是EXPLAIN输出中另外一个很重要的列,该列显示MySQL在查询过程中的一些详细信息,MySQL查询优化器执行查询的过程中对查询计划的重要补充信息。...这是MySQL服务层完成的,但无需再回表查询记录。 Using index condition 这是MySQL 5.6出来的新特性,叫做“索引条件推送”。...distinct 优化distinct操作,在找到第一匹配的元组后即停止找同样值的动作 explain的作用 我们使用explain命令来查看mysql语句的执行计划(execution plan),解释

3.9K60
  • mysql explain ref null_MySQL Explain详解

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

    1.8K40

    Mysql Explain 详解

    ,有没有做全表扫描,这都可以通过explain命令来查看。...(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.1K20

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

    【mysql】explain介绍

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

    46430

    mysql explain详解

    对于经常使用mysql的兄弟们,对explain一定不会陌生。当你在一条SELECT语句前放上关键词EXPLAIN,MySQL解释它将如何处理SELECT,提供有关表如何联合和以什么次序的信息。...官方的关于explain的文档在http://dev.mysql.com/doc/refman/5.1/en/using-explain.html(英文),本文可作为官方文献的不完整通俗读物。...使用的方法 EXPLAIN tbl_name 或: EXPLAIN [EXTENDED] SELECT select_options 前者可以得出一个表的字段结构等等,后者主要是给出相关的一些索引信息,...举例 mysql> explain select * from event; +----+-------------+-------+------+---------------+------+----...key 显示MySQL实际决定使用的键。如果没有索引被选择,键是NULL。 key_len 显示MySQL决定使用的键长度。如果键是NULL,长度就是NULL。

    790100

    MySQL - EXPLAIN详解

    概述 EXPLAIN: 为 SELECT语句中使用到的每个表返回一条信息。它按照MySQL在处理语句时读取它们的顺序列出这些表。MySQL使用循环嵌套算法解析所有连接。...QEP: SQL语句的查询执行计划 注意: 在以前版本的MySQL中,使用 EXPLAIN PARTITIONS 与 EXPLAIN EXTENDED 来生成分区和扩展信息 。...目前为止这些语法仍然是向后兼容的,但未来 MySQL会将它们排除出 EXPLAIN语法,因为现在 EXPLAIN默认就会输出分区和扩展的相关信息。...(5.7才有) possiblekeys(JSON名: possiblekeys) 表示MySQL查找表中的行时可选择的索引。请注意,此列完全独立于 EXPLAIN输出中显示的顺序。...如果是这样,那么就需要创造一个适当的索引,并再次用 EXPLAIN检查 key(JSON名:key) 显示MySQL实际决定使用的键(索引),如果MySQL决定使用其中一个 possible_keys

    1.4K21

    mysql explain 详解

    准备一条复杂一点的语句 字段描述 id  mysql查询序列号 可以认定为mysql语句的执行顺序 1:如果是同一组查询,id序号则一致,顺序从上到下 2:如果是子查询,则序号自增,执行顺序从小到大...select_type 查询的类型 mysql的查询方式,有以下几种类型: SIMPLE                简单的查询,不适用union和子查询等 PRIMARY               ...表使用了分区,则会显示出具体需要查询的分区 type 访问类型 mysql在查询中找到数据的查询方式,从上往下,性能从最好到最差 system                该表只有一行数据(系统表),...matching min/max row                  当查询列表处有 MIN 或者 MAX 聚集函数,但是并没有符合 WHERE 子句中的搜索条件的记录时,将会提示该额外信息( EXPLAIN...如果 WHERE 子句中包含要求被驱动表的某个列等于 NULL 值的搜索条件,而且那个列又是不允许存储 NULL 值的,那么在该表的执行计划的 Extra 列就会提示 Not exists 额外信息( EXPLAIN

    88820

    MySQL explain详解

    MySQL explain详解 Explain简介 本文主要讲述如何通过 explain 命令获取 select 语句的执行计划,通过 explain 我们可以知道以下信息:表的读取顺序,数据读取操作的类型...下面是使用 explain 的例子: 在 select 语句之前增加 explain 关键字,MySQL会在查询上设置一个标记,执行查询时,会返回执行计划的信息,而不是执行这条SQL(如果 from 中包含子查询...mysql> explain select * from actor; +----+-------------+-------+------+---------------+------+-------...MySQL会将结果存放在一个临时表中,也称为派生表(derived的英文含义) 用这个例子来了解 primary、subquery 和 derived 类型 mysql> explain select...常见的重要值如下: distinct: 一旦mysql找到了与行相联合匹配的行,就不再搜索了 mysql> explain select distinct name from film left join

    72920

    mysql explain ref const_MySQL EXPLAIN 详解「建议收藏」

    一 .介绍 EXPLAIN 命令用于SQL语句的查询执行计划。这条命令的输出结果能够让我们了解MySQL 优化器是如何执行SQL 语句的。...EXPLAIN select * from person; 六. possible_keys : 该 possible_keys列表示MySQL可以从中选择查找表中的行的索引。...对数据不是按照表内的索引顺序进行读取,而是使用了其他字段重新排序. mysql> EXPLAIN select * from person ORDER BYid;+—-+————-+——–+——-+——...是按照表内的索引顺序进行读的 再看下面的列子: mysql> EXPLAIN select * from person ORDER BYsalary;+—-+————-+——–+——+—————+——+...mysql> explain select * from a16 where num_a=1 and num_b=1;+—-+————-+——-+————+——+—————+——-+———+——-+——

    1K40
    领券