MySql 中的explain命令(抄的)

对于大数据量的查询处理,记得先用explian看下,尽量的优化

例如: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:mysq认为必须检查的用来返回请求数据的行数。

extra:关于mysq如何解析查询的额外信息。(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_res: 在连接中,mysql在查询时,从前面的表中,对每一个记录的联合都从表中读取一个记录,它在查询使用了索引为主键或唯一键的全部时使用

ref:之歌链接类型只有在查询使用了不是唯一或主键的键或者是这些类型的部分(比如,利用最左边前缀)时发生。对于之前的表的每一个行联合,全部记录都将从表中读出。这个类型严重依赖于根据索引匹配的记录多少。。--------越少越好

range:这个链接类型使用索引返回的一个返回的行。比如使用 > 或 < 查找东西时发生的情况

index:这个连接类型对前面的表中的每一个记录联合进行完全扫描(比all更好,因为索引一般小于表数据)

All:这个连接类型对于前面的每个记录进行完全扫描,这一般比较糟糕,应该尽量避免。

时间: 2024-11-02 01:54:09

MySql 中的explain命令(抄的)的相关文章

详解 MySQL 中的 explain

来源:persister 链接:http://www.blogjava.net/persister/archive/2008/10/27/236813.html 在 explain的帮助下,您就知道什么时候该给表添加索引,以使用索引来查找记录从而让select 运行更快.如果由于不恰当使用索引而引起一些问题的话,可以运行 analyze table来更新该表的统计信息,例如键的基数,它能帮您在优化方面做出更好的选择. explain 返回了一行记录,它包括了 select语句中用到的各个表的信息

mysql中如何在命令行中,执行一个SQL脚本文件?

需求描述: 在mysql数据库的使用中,有的时候,需要直接在shell的命令行中,执行某个SQL脚本文件, 比如,要初始化数据库,创建特定的存储过程,创建表等操作,这里进行一个基本的测试. 一般情况,mysql都是以交互式的方式登录,执行SQL语句的.这里要做的就是将SQL放在一个文件里,让mysql 客户端程序来执行. 操作过程: 1.创建一个SQL脚本的文本文件,里面放想要执行的SQL语句 use test01 select count(*) from ts051; 备注:SQL脚本的文件名

在MySQL中使用explain查询SQL的执行计划

1.什么是MySQL执行计划 要对执行计划有个比较好的理解,需要先对MySQL的基础结构及查询基本原理有简单的了解. MySQL本身的功能架构分为三个部分,分别是 应用层.逻辑层.物理层,不只是MySQL ,其他大多数数据库产品都是按这种架构来进行划分的. 应用层,主要负责与客户端进行交互,建立链接,记住链接状态,返回数据,响应请求,这一层是和客户端打交道的. 逻辑层,主要负责查询处理.事务管理等其他数据库功能处理,以查询为例. 首先接收到查询SQL之后,数据库会立即分配一个线程对其进行处理,第

bash中使用mysql中的update命令

mysql -uroot -ppasswd -e "update tbadmin set sPassword ='************' where sUserName='admin'" database mysql客户端命令行有一个参数是 -e,即运行制定SQL命令.例如 mysql -uxx -pxx -e"select * from table" database

Mysql中explain命令查看语句执行概况

Mysql中可以使用explain命令查看查询语句的执行方式,使用方法举例:explain + 查询语句 例如:explain select * from user_info 几个重要的字段说明: table:此次查询操作是关联哪张数据表 type:连接查询操作类型,一般根据索引查询的话为const,如果没有索引,则遍历所有数据那么为All(此种方式效率极低) possible_keys:显示可能应用在这张表中的索引.如果为空,没有可能的索引. key: 实际使用的索引.如果为NULL,则没有使

MySQL中EXPLAIN解释命令详解

MySQL中的explain命令显示了mysql如何使用索引来处理select语句以及连接表.explain显示的信息可以帮助选择更好的索引和写出更优化的查询语句. 1.EXPLAIN的使用方法:在select语句前加上explain就可以了. 如:explain select surname,first_name form a,b where a.id=b.id 2.EXPLAIN列的解释: table:显示这一行的数据是关于哪张表的 type:这是重要的列,显示连接使用了何种类型.从最好到最

【MySQL笔记】SQL优化利器 - explain命令的输出格式详解

有MySQL使用经验的同学在实际项目中可能会遇到SQL慢查询的场景,有些场景很容易定位问题所在(如单表操作有慢查询SQL时,仔细check SQL语句通常很容易定位索引问题),而有些复杂业务场景下(如多表联合查询几十个字段并做group或sort等操作),人工check SQL语句通常很难发现SQL瓶颈根源.这个时候,MySQL提供的explain命令就派上用场了. 本笔记主要对explain的输出结果做说明,并给出根据explain输出对SQL做优化的思路. 1. EXPLAIN语法及用途 e

MySQL查询优化之explain的深入解析

MySQL查询优化之explain的深入解析 作者: 字体:[增加 减小] 类型:转载 时间:2013-06-13我要评论 本篇文章是对MySQL查询优化中的explain进行了详细的分析介绍,需要的朋友参考下 在分析查询性能时,考虑EXPLAIN关键字同样很管用.EXPLAIN关键字一般放在SELECT查询语句的前面,用于描述MySQL如何执行查询操作.以及MySQL成功返回结果集需要执行的行数.explain 可以帮助我们分析 select 语句,让我们知道查询效率低下的原因,从而改进我们查

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.in