`
wangdei
  • 浏览: 372243 次
社区版块
存档分类
最新评论

MYSQL中EXPLAIN的解释

阅读更多

explain显示了mysql如何使用索引来处理select语句以及连接表。可以帮助选择更好的索引和写出更优化的查询语句。

使用方法,在select语句前加上explain就可以了:

如:explain select surname,first_name form a,b where a.id=b.id

EXPLAIN列的解释:

  • table:显示这一行的数据是关于哪张表的
  • type:这是重要的列,显示连接使用了何种类型。从最好到最差的连接类型为const、eq_reg、ref、range、indexhe和ALL
  • possible_keys:显示可能应用在这张表中的索引。如果为空,没有可能的索引。可以为相关的域从WHERE语句中选择一个合适的语句
  • key:实际使用的索引。如果为NULL,则没有使用索引。很少的情况下,MYSQL会选择优化不足的索引。这种情况下,可以在SELECT语句中使用USE INDEX(indexname)来强制使用一个索引或者用IGNORE INDEX(indexname)来强制MYSQL忽略索引
  • key_len:使用的索引的长度。在不损失精确性的情况下,长度越短越好
  • ref:显示索引的哪一列被使用了,如果可能的话,是一个常数
  • rows:MYSQL认为必须检查的用来返回请求数据的行数
  • Extra:关于MYSQL如何解析查询的额外信息。将在表4.3中讨论,但这里可以看到的坏的例子是Using temporary和Using filesort,意思MYSQL根本不能使用索引,结果是检索会很慢

extra列返回的描述的意义

  • Distinct:一旦MYSQL找到了与行相联合匹配的行,就不再搜索了
  • Not exists: MYSQL优化了LEFT JOIN,一旦它找到了匹配LEFT JOIN标准的行,就不再搜索了
  • Range checked for each Record(index map:#):没有找到理想的索引,因此对于从前面表中来的每一个行组合,MYSQL检查使用哪个索引,并用它来从表中返回行。这是使用索引的最慢的连接之一
  • Using filesort: 看到这个的时候,查询就需要优化了。MYSQL需要进行额外的步骤来发现如何对返回的行排序。它根据连接类型以及存储排序键值和匹配条件的全部行的行指针来排序全部行
  • Using index: 列数据是从仅仅使用了索引中的信息而没有读取实际的行动的表返回的,这发生在对表的全部的请求列都是同一个索引的部分的时候
  • Using temporary 看到这个的时候,查询需要优化了。这里,MYSQL需要创建一个临时表来存储结果,这通常发生在对不同的列集进行ORDER BY上,而不是GROUP BY上
  • Where used 使用了WHERE从句来限制哪些行将与下一张表匹配或者是返回给用户。如果不想返回表中的全部行,并且连接类型ALL或index,这就会发生,或者是查询有问题不同连接类型的解释(按照效率高低的顺序排序)
  • system 表只有一行:system表。这是const连接类型的特殊情况
  • const:表中的一个记录的最大值能够匹配这个查询(索引可以是主键或惟一索引)。因为只有一行,这个值实际就是常数,因为MYSQL先读这个值然后把它当做常数来对待
  • eq_ref:在连接中,MYSQL在查询时,从前面的表中,对每一个记录的联合都从表中读取一个记录,它在查询使用了索引为主键或惟一键的全部时使用
  • ref:这个连接类型只有在查询使用了不是惟一或主键的键或者是这些类型的部分(比如,利用最左边前缀)时发生。对于之前的表的每一个行联合,全部记录都将从表中读出。这个类型严重依赖于根据索引匹配的记录多少—越少越好
  • range:这个连接类型使用索引返回一个范围中的行,比如使用>或<查找东西时发生的情况
  • index: 这个连接类型对前面的表中的每一个记录联合进行完全扫描(比ALL更好,因为索引一般小于表数据)
  • ALL:这个连接类型对于前面的每一个记录联合进行完全扫描,这一般比较糟糕,应该尽量避免
分享到:
评论

相关推荐

    详解MySQL中EXPLAIN解释命令及用法讲解

    1,情景描述:同事教我在mysql中用explain,于是查看了一番返回内容的含义 2,现就有用处的内容做如下记录: 1,explain显示了mysql如何使用索引来处理select语句以及连接表。可以帮助选择更好的索引和写出更优化的...

    mysql 中explain的详解

    EXPLAIN关键字一般放在SELECT查询语句的前面,用于描述MySQL如何执行查询操作、以及MySQL成功返回结果集需要执行的行数。explain 可以帮助我们分析 select 语句,让我们知道查询效率低下的原因,从而改进我们查询,让...

    Mysql中explain的说明

    ### MySQL中EXPLAIN命令详解 #### 一、概述 在MySQL数据库管理中,查询优化是一项非常重要的工作。通过优化查询,不仅可以提升查询速度,还能节省系统资源,提高系统的整体性能。`EXPLAIN`命令作为MySQL提供的一种...

    mysqlexplain.ppt

    以下是对EXPLAIN命令及其相关知识点的详细解释。 1. **EXPLAIN调用方式**: - **基础形式**:`EXPLAIN SELECT ...` - **EXTENDED形式**:`EXPLAIN EXTENDED SELECT ...`,此形式会显示出经过MySQL优化器优化后的...

    mysql+explain实例分析

    在本篇文章中,我们将深入探讨"mysql+explain实例分析"这一主题,以理解如何利用`EXPLAIN`命令来优化MySQL查询性能。 `EXPLAIN`是MySQL提供的一种功能,用于在不实际执行查询的情况下分析SQL语句的执行计划。它帮助...

    MySQL-Explain

    Mysql Explain 使用

    Mysql Explain

    ### MySQL Explain 深度解析 #### 一、Explain 的意义 在数据库查询优化领域,`EXPLAIN` 是一个非常强大的工具,它能够帮助我们分析 `SELECT` 语句的执行过程,揭示出查询效率低下的原因。通过 `EXPLAIN` 的分析...

    mysql explain

    mysql explain

    Mysql Explain详细解析

    3. **使用 EXPLAIN ANALYZE**:在 MySQL 8.0.19 及更高版本中,可以通过 `EXPLAIN FORMAT=JSON` 或 `EXPLAIN ANALYZE` 来获取更详细的执行计划和性能数据。 4. **优化表结构**:如果 `EXPLAIN` 显示存在大量全表扫描...

    MySQL-Explain 详解

    MySQL Explain 是 MySQL 中的一个重要工具,用于解释和优化 SQL 查询语句。通过 Explain,可以了解 MySQL 是如何执行查询语句的,并且可以根据 Explain 的结果来优化查询语句。 一、用法 Explain 的用法非常简单...

    MySQL 性能优化神器 Explain 使用分析

    MySQL 性能优化 Explain ,MySQL 性能优化 ExplainMySQL 性能优化 ExplainMySQL 性能优化 ExplainMySQL 性能优化 ExplainMySQL 性能优化 ExplainMySQL 性能优化 ExplainMySQL 性能优化 Explain

    MySQL explain 笔记整理

    ### MySQL EXPLAIN 笔记整理 #### 一、EXPLAIN 命令简介 `EXPLAIN` 是 MySQL 提供的一个非常有用的工具,用于展示查询执行计划。通过它,我们可以了解到 SQL 查询是如何被执行的,这对于优化 SQL 语句、提高查询...

    mysqlexplain.pdf

    mysql执行计划解读,刚要: 1、mysql执行计划调用方式; 2、执行计划包含的信息; 3、执行计划显示内容解读; 4、mysql执行计划的局限;

    mysql explain用法

    Explain命令在解决数据库性能上是第一推荐使用命令,大部分的性能问题可以通过此命令来简单的解决,Explain可以用来查看SQL语句的执行效 果,可以帮助选择更好的索引和优化查询语句,写出更好的优化语句。

    mysql explain详解

    MySQL中的`EXPLAIN`命令是用于分析SQL查询执行计划的重要工具,它可以帮助数据库管理员和开发者了解MySQL如何处理SQL语句,从而进行性能优化。在深入理解`EXPLAIN`之前,我们先来了解一下数据库优化的基本概念。 ...

    MYSQL EXPLAIN详解

    #### 五、EXPLAIN中的列含义 EXPLAIN 结果中的每一行都包含了关于查询计划的重要信息,下面是一些关键字段的含义: - **id**: 表示该行属于哪个 SELECT 子句。 - 如果查询中只有一个 SELECT 且没有子查询或 UNION...

Global site tag (gtag.js) - Google Analytics