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:这是重要的列,显示连接使用了何种类型。从最好到最差的连接类型为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如何解析查询的额外信息。坏的例子是Using temporary和Using filesort,意思MYSQL根本不能使用索引,结果是检索会很慢

3.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:这个连接类型对于前面的每一个记录联合进行完全扫描,这一般比较糟糕,应该尽量避免.

附上在微博系统中数据查询性能分析的一个例子:

默认查询,未使用索引:

EXPLAIN SELECT *

FROM microblogs

GROUP BY author

rows = 331 查询所有行

去掉explain命令,执行select * from microblogs group by author,Query took 0.0001 sec

再看使用索引的效果:

EXPLAIN SELECT *

FROM microblogs

USE INDEX ( author )

GROUP BY author

rows = 7 查询只需7行

去掉explain命令,执行select * from microblogs use index (author) group by author, Query took 0.0001 sec

通过比较可以得知,使用索引必须检查的行数由331变为7,是否数据库的工作量降低,还有待更多研究,毕竟可能由于数据规模不够大两者的执行时间似乎并无差异。

mysql explain是什么意思_MySQL中EXPLAIN解释命令详解相关推荐

  1. Fedora 中的 Yum 命令详解

    http://pengjiayou.com/blog/yum-fedora-in-order-detailed-explanation 总所周知,Redhat和Fedora的软 件安装命令是rpm,但 ...

  2. linux cut命令学习,Linux中的cut 命令详解

    今天小编要跟大家分享的文章是关于Linux中的cut 命令详解.cut 命令在Linux和Unix中的作用是从文件中的每一行中截取出一些部分,并输出到标准输出中.我们可以使用 cut 命令从一行字符串 ...

  3. USB CCID类协议中的APDU命令详解

    出处:http://blog.chinaunix.net/uid-29124653-id-4573075.html 原文地址:USB CCID类协议中的APDU命令详解 作者:jeffasdasd 最 ...

  4. shell中的mput_FTP命令详解 及 shell中的使用

    FTP命令详解 FTP的命令格式为:ftp-v-u-d-i-n-g[IP地址]-v显示远程服务器的所有响应信息(verbose:详细,繁冗)-n限制ftp的自动登录,即不使用-d使用调试方式(debu ...

  5. linux中的tar命令详解,【Linux】tar命令详解

    tar命令详解 -c: 建立压缩档案 -x:解压 -t:查看内容 -r:向压缩归档文件末尾追加文件 -u:更新原压缩包中的文件 这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用 ...

  6. mysql explain key为空_MySQL中explain的使用以及性能分析

    原标题:MySQL中explain的使用以及性能分析 MySQL 提供了一个 EXPLAIN 命令, 它可以对 SELECT 语句进行分析, 并输出 SELECT 执行的详细信息, 以供开发人员针对性 ...

  7. mysql添加两种数据类型_MySQL入门(二) 数据库数据类型详解

    序言 今天去健身了,感觉把身体练好还是不错的,闲话不多说,把这个数据库所遇到的数据类型今天统统在这里讲清楚了,以后在看到什么数据类型,咱度应该认识,对我来说,最不熟悉的应该就是时间类型这块了.但是通过 ...

  8. mysql innodb 的锁机制_Mysql之Innodb锁机制详解

    InnoDB与MyISAM的最大不同有两点:一是支持事务(TRANSACTION):二是采用了行级锁.关于事务我们之前有专题介绍,这里就着重介绍下它的锁机制. 总的来说,InnoDB按照不同的分类共有 ...

  9. Linux 中的 nl 命令详解及C/C++代码实现(文件行数)

    在Linux 操作系统中,如果想编辑文本文件时,希望显示在其前面附加行号的行,这时 Linux 中 nl 命令就派上用场,nl 命令对文件中的行进行编号. Linux nl命令 nl 命令是一个 Un ...

  10. Shell中的Sed命令详解

    简介 sed 是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间"(pattern space),接着用sed命令处理缓冲区中的内容,处 ...

最新文章

  1. 十个隐藏_LOL手游:新版增加42个英雄,大白兔:10个隐藏T0角色
  2. python与js通用的数据结构_五种编程语言解释数据结构与算法——顺序表3(JavaScript与Python语言实现)...
  3. 【java开发系列】—— 嵌套类与内部类
  4. 八位技术专家分享他们最喜欢的物联网技术
  5. mysql proxy 读写分离_mysql-proxy 实现读写分离
  6. 串行 RapidIO
  7. VS2010/MFC编程入门之三(MFC应用程序框架分析)
  8. 计算机系女生节条幅,2018女生节横幅 最新女生节横幅标语 2018高校女生节横幅...
  9. 操作系统--进程和线程
  10. c语言遥控器程序设计,基于51单片机的红外线遥控器解码程序设计
  11. Typora自制主题
  12. yy聊天室-创建登录界面与好友列表界面
  13. Anker-一个研发工程师的电商梦
  14. Data Structures in C++:八大基本数据结构概述
  15. SpringBoot 全局事务配置
  16. python字典键值对的添加和遍历
  17. 2_嵌入式软件开发简介
  18. 微原实验三 基本IO口扩展
  19. xp安装java_在WindowsXP中,如何安装JAVA软件?
  20. 我啊,程序员啊程序员

热门文章

  1. 18岁少年盗取1500万日元萌乃币, 逼交易所关停, 引发日本史上第一次加密币盗窃法律诉讼...
  2. 1077E Thematic Contests 【二分答案】
  3. 真offer收割机!190道大数据面试真题大汇总(附答案详解)
  4. 严重: Unable to set localhost. This prevents creation of a GUID. Cause was: springtest: springtest
  5. java软件更换皮肤怎么做_java窗体程序更换皮肤方法详细步骤
  6. java: Compilation failed: internal java compiler error
  7. 2021-07-06淘宝,天猫超市
  8. 蓝桥杯题目练习(学做菜)
  9. 华为手机热点无法连接_华为P7手机WLAN热点连接失败解决方法介绍
  10. 【工具类】TimeLine功能的使用(一)