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

mysql的explain的用法

EXPLAIN 是 MySQL 中的一个非常有用的命令,用于分析和解释 SELECT 查询的执行计划。通过 EXPLAIN,开发人员可以了解 MySQL 如何执行查询,从而优化查询性能。

基础概念

当执行 EXPLAIN 命令时,MySQL 会返回一个结果集,其中包含了查询的执行计划信息。这些信息包括:

  • id:查询的标识符。
  • select_type:查询的类型(例如,SIMPLE、PRIMARY、SUBQUERY 等)。
  • table:输出结果集的表。
  • type:连接类型,表示 MySQL 如何连接表(例如,ALL、index、range、ref 等)。
  • possible_keys:可能使用的索引。
  • key:实际使用的索引。
  • key_len:使用的索引长度。
  • ref:显示了哪些列或常量被用作索引查找的条件。
  • rows:MySQL 预计需要检查的行数。
  • Extra:包含不适合在其他列中显示的额外信息。

优势

  • 性能调优:通过分析 EXPLAIN 的结果,可以识别查询中的瓶颈,如全表扫描、未使用索引等。
  • 理解查询执行过程EXPLAIN 提供了查询执行的详细步骤,有助于理解查询是如何工作的。
  • 优化索引策略:通过查看 possible_keyskey,可以决定是否需要添加或修改索引。

类型

EXPLAIN 可以应用于多种类型的查询,包括:

  • 简单查询
  • 联合查询(UNION)
  • 子查询
  • 视图查询

应用场景

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

  • 查询执行缓慢。
  • 查询结果集过大。
  • 需要优化查询性能。

示例

假设有一个名为 users 的表,结构如下:

代码语言:txt
复制
CREATE TABLE users (
    id INT PRIMARY KEY,
    name VARCHAR(100),
    email VARCHAR(100),
    age INT
);

如果你想查看以下查询的执行计划:

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

EXPLAIN 将返回类似以下的结果:

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

这个结果表明,查询使用了 age 索引进行范围扫描,并且预计会检查 1000 行数据。

解决问题的方法

如果在 EXPLAIN 的结果中发现性能问题,可以采取以下措施:

  • 添加索引:如果 possible_keys 列中有索引未被使用,可以考虑添加新的索引。
  • 优化查询:修改查询语句,减少不必要的列选择,使用更有效的连接类型。
  • 调整表结构:如果经常需要根据某些列进行查询,可以考虑将这些列设为主键或添加索引。

参考链接

通过 EXPLAIN 命令,你可以更好地理解和优化 MySQL 查询的性能。

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

相关·内容

MySQL Explain用法详解

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里面使用索引。

1.2K00
  • mysql explain用法和结果含义

    explain显示了mysql如何使用索引来处理select语句以及连接表。可以帮助选择更好索引和写出更优化查询语句。...使用方法,在select语句前加上explain就可以了: 先看个例子 mysqlexplain select * from t_order;  | id | select_type | table...ALL:对于每个来自于先前行组合,进行完整表扫描。 possible_keys 指出MySQL能使用哪个索引在该表中找到行 key 显示MySQL实际决定使用键(索引)。...Extra 该列包含MySQL解决查询详细信息 Distinct:MySQL发现第1个匹配行后,停止为当前行组合搜索更多行。...Extra 该列包含MySQL解决查询详细信息 Distinct:MySQL发现第1个匹配行后,停止为当前行组合搜索更多行。

    2.1K10

    Mysqlexplain用法和结果字段含义介绍

    做一个积极的人 编码、改bug、提升自己 我有一个乐园,面向编程,春暖花开 文章目录 explain用法 explain结果字段含义介绍 id select_type table type possible_keys...explain用法 mysql> explain select * from students; +----+-------------+----------+------+--------------...Extra 该列包含MySQL解决查询详细信息 Distinct:MySQL发现第1个匹配行后,停止为当前行组合搜索更多行。...不会告诉你关于触发器、存储过程信息或用户自定义函数对查询影响情况 EXPLAIN不考虑各种Cache EXPLAIN不能显示MySQL在执行查询时所作优化工作 部分统计信息是估算,并非精确值 EXPALIN...参考博文 mysqlexplain用法和结果含义 EXPLAIN 命令详解 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/121081.html原文链接:https

    60040

    mysqlexplain详解

    我们在实际业务中经常会使用到explain,因为这里涉及到查询,下面我们来看一个例子,比如我们要查一本书上一章或者下一章,我们sql是这样: 查询5164这本书4054495这一章上一章:下面的是...500多万条数据,我explain了一下: explain SELECT * FROM article WHERE (id < 4054495) AND (book_id = '5164') ORDER...基于mysql查询,更多是注重扫描查询行数,以及是否使用到索引,我常看最重要是扫描rows字段,然后就key字段,看下extra属性,这样就基本能解决问题了。...字段:possible_keys 解释:可能用到索引 字段:key 解释:实际用到索引 常见值及其说明: MySQL决定实际用到索引,显示是索引名称,多个索引用逗号隔开,如果没有 ,则为null...using temporary:mysql需要创建一张临时表来保存中间结果。也就是说,需要先把数据放到临时表中,然后从临时表中获取需要数据。

    39430

    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在查询时,从前面的表中,对每一个记录联合都从表中读取一个记录,它在查询使用了索引为主键或惟一键全部时使用

    49010

    Mysql Explain主要字段

    这可能是除了system和const之外最好类型。 当主键或唯一非NULL索引所有字段都被用作join联接时会使用此类型。 eq_r ef可用于使用’='操作符作比较索引列。...比较值可以是常量,也可以是使用在此表之前读取表达式。 相对于下面的ref区别就是它使用唯一索引,即主键或唯一索引,而ref使用是非唯一索引或者普通索引。...4、ref 对于来自前面表每一行,在此表索引中可以匹配到多行。若联接只用到索引最左前缀或索引不是主键或唯一索引时, 使用ref类型(也就是说,此联接能够匹配多行记录)。...要注意,全文索引优先级很高,若全文索引和普通索引同时存在时,mysql不管代价,优先选择使用全文索引 6、ref_or_null 跟ref类型类似,只是增加了null值比较。实际用不多。...这里包含两种情况: 一种是查询使用了覆盖索引,那么它只需要扫描索引就可以获得数据,这个效率要比全表扫描要快, 12ALl 没有使用索引,全表扫描 12. extra(重要)     EXplain

    1.4K20

    关于Mysqlexplain工具

    当你运行一条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

    41330

    mysql explain ref列_MySQL EXPLAIN详解

    MySQL EXPLAIN详解:http://www.jianshu.com/p/ea3fc71fdc45 MySQL EXPLAIN命令是查询性能优化不可缺少一部分,该文主要讲解explain...,N指向子查询,也就是explain结果中下一列 当有union result时候,表名是union 1,2等形式,1,2表示参与unionquery id 注意:MySQL对待这些表和普通表一样...Extra Extra是EXPLAIN输出中另外一个很重要列,该列显示MySQL在查询过程中一些详细信息,MySQL查询优化器执行查询过程中对查询计划重要补充信息。...distinct 优化distinct操作,在找到第一匹配元组后即停止找同样值动作 explain作用 我们使用explain命令来查看mysql语句执行计划(execution plan),解释...用法 只需要在sql语句前加上explain就可以了,比如: +—-+————-+——-+————+——+—————+——+———+——+——–+———-+——-+ | id | select_type

    3.7K60

    谈谈MYSQLExplain

    前言我们在设计一个系统时候,有时候通常为了基础业务,写出查询sql语句并不高效,从而影响到用户使用系统整体体验感不是很好,我们通常在系统测试阶段会开启MySQL慢日志查询功能,可以在MySQL...了,从而就可以对这些语句进行调优优化,使用 Explain来分析 SQL 语句性能。...=3#慢查询日志以文件形式输出log_output=FILE基本介绍 Explain被称为执行计划,在语句之前增加 explain 关键字,MySQL 会在查询上设置一个标记,模拟MySQL优化器来执行...Explain结果是基于数据表中现有数据Explain结果与MySQL版本有很大关系,不同版本优化器优化策略不同。...语法:explain sql语句示例:mysql> explain select * from actor;+----+-------------+-------+------+------------

    25821

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

    MySQL Explain详解 ?...上图是使用Explain分析一条sql语句,下面我们来看一下各个字段具体含义是什么 expain出来信息有10列,分别是id、select_type、table、type、possible_keys...,看到是derivedx(x是个数字,我理解是第几步执行结果) mysql> explain select * from (select * from ( select * from t1 where...五、possible_keys 指出MySQL能使用哪个索引在表中找到记录,查询涉及到字段上若存在索引,则该索引将被列出,但不一定被查询使用 该列完全独立于EXPLAIN输出所示次序。...如果是这样,创造一个适当索引并且再次用EXPLAIN检查查询 六、Key key列显示MySQL实际决定使用键(索引) 如果没有选择索引,键是NULL。

    1.1K10

    Mysql Explain 详解

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

    1.1K20
    领券