视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
mysqlexplain的用法(使用explain优化查询语句)
2020-11-09 20:41:14 责编:小采
文档


首先我来给一个简单的例子,然后再来解释explain列的信息。

表一:catefory 文章分类表:

CREATE TABLE IF NOT EXISTS `category` ( 
 `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT, 
 `name` varchar(50) NOT NULL DEFAULT '', 
 PRIMARY KEY (`id`) 
) ENGINE=MyISAM 
INSERT INTO `test`.`category` VALUES (NULL , '分类1'); 
INSERT INTO `test`.`category` VALUES (NULL , '分类2'); 
INSERT INTO `test`.`category` VALUES (NULL , '分类3');

表二:article文章表:

CREATE TABLE IF NOT EXISTS `article` (
 `aid` int(11) NOT NULL,
 `cid` int(11) NOT NULL,
 `content` text NOT NULL,
 PRIMARY KEY (`aid`),
 KEY `cid` (`cid`)
) ENGINE=MyISAM
INSERT INTO `test`.`article` (`aid`, `cid`, `content`) VALUES ('', '7', '脚本之家(jb51.net)教程');

执行explain:

EXPLAIN SELECT name, content
FROM category, article
WHERE category.id = article.cid

得到结果:

EXPLAIN列的解释:

id:选定的执行计划中查询的序列号。表示查询中执行select子句或操作表的顺序,id值越大优先级越高,越先被执行。id相同,执行顺序由上至下。

select_type:查询类型 说明

1、SIMPLE:简单的select查询,不使用union及子查询
2、PRIMARY:最外层的select查询
3、UNION:UNION中的第二个或随后的select查询,不依赖于外部查询的结果集
4、DEPENDENT UNION:UNION中的第二个或随后的select查询,依赖于外部查询的结果集
5、UNION RESULT: UNION查询的结果集SUBQUERY子查询中的第一个select查询,不依赖于外部查询的结果集
6、DEPENDENT SUBQUERY:子查询中的第一个select查询,依赖于外部查询的结果集DERIVED用于from子句里有子查询的情况。
MySQL会递归执行这些子查询,把结果放在临时表里。
7、UNCACHEABLE SUBQUERY:结果集不能被缓存的子查询,必须重新为外层查询的每一行进行评估
8、UNCACHEABLE UNION:UNION中的第二个或随后的select查询,属于不可缓存的子查询

table:显示这一行的数据是关于哪张表的
type:这是重要的列,显示连接使用了何种类型。从最好到最差的连接类型为const、eq_reg、ref、range、index和ALL
all: full table scan ;mysql将遍历全表以找到匹配的行;
index : index scan; index 和 all的区别在于index类型只遍历索引;
range:索引范围扫描,对索引的扫描开始于某一点,返回匹配值的行,常见与between ,< ,>等查询;
ref:非唯一性索引扫描,返回匹配某个单独值的所有行,常见于使用非唯一索引即唯一索引的非唯一前缀进行查找;
eq_ref:唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配,常用于主键或者唯一索引扫描;
const,system:当mysql对某查询某部分进行优化,并转为一个常量时,使用这些访问类型。如果将主键置于where列表中,mysql就能将该查询转化为一个常量。
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根本不能使用索引,结果是检索会很慢。
因为真正的优化会考虑到大数据,我会在后面写更详细的优化教程,今天累了!分享一个详细的mysql explain语法及使用教程(Mysql_Explain_语法详细解析.pdf)!

您可能感兴趣的文章:

  • 详解MySQL中EXPLAIN解释命令及用法讲解
  • Mysql中explain作用详解
  • 浅谈mysql explain中key_len的计算方法
  • mysql优化利器之explain使用介绍
  • Mysql Explain 详细介绍
  • 简述Mysql Explain 命令
  • MySQL中EXPLAIN命令详解
  • MySQL查询优化之explain的深入解析
  • mysql中explain用法详解
  • Mysql之EXPLAIN显示using filesort介绍
  • mysql总结之explain
  • MySQL性能分析及explain的使用说明
  • MYSQL explain 执行计划
  • mysql之explain使用详解(分析索引)
  • 下载本文
    显示全文
    专题