Explain
explain关键字
explain关键字一般放在SELECT查询语句的前面,用于描述MySQL如何执行查询操作、以及MySQL成功返回结果集需要执行的行数。explain 可以帮助我们分析 select 语句,让我们知道查询效率低下的原因,从而改进我们查询,让查询优化器能够更好的工作。
用法:
结果集说明如下:
| 项 | 说明 |
|---|---|
| id | MySQL Query Optimizer选定的执行计划中查询的序列号。表示查询中执行select子句或操作表的顺序,id值越大优先级越高,越先被执行。id相同,执行顺序由上至下。 |
| select_type 查询类型 | 说明 |
|---|---|
| SIMPLE | 简单的select查询,不使用union及子查询。 |
| PRIMARY | 最外层的select查询。 |
| UNION | UNION 中的第二个或随后的 select查询,不依赖于外部查询的结果集。 |
| DEPENDENT UNION | UNION中的第二个或随后的 select查询,依 赖于外部查询的结果集。 |
| SUBQUERY | 子查询中的第一个select查询,不依赖于外部查询的结果集。 |
| DEPENDENT SUBQUERY | 子查询中的第一个select查询,依赖于外部查询的结果集。 |
| DERIVED | 用于from子句里有子查询的情况。MySQL会递归执行这些子查询,把结果放在临时表里。 |
| UNCACHEABLE SUBQUERY | 结果集不能被缓存的子查询,必须重新为外层查询的每一行进行评估。 |
| UNCACHEABLE UNION | UNION中的第二个或随后的select查询,属于不可缓存的子查询。 |
| 项 | 说明 |
|---|---|
| table | 输出行所引用的表 |
| type 显示连接使用的类型,按最优到最差的类型排序 | 说明 |
|---|---|
| system | 表仅有一行(=系统表)。这是const连接类型的一个特例。 |
| const | const用于用常数值比较PRIMARY KEY时。当查询的表仅有一行时,使用System。 |
| eq_ref | const用于用常数值比较PRIMARY KEY时。当查询的表仅有一行时,使用System。 |
| ref | 连接不能基于关键字选择单个行,可能查找到多个符合条件的行。叫做ref是因为索引要跟某个参考值相比较。这个参考值或者是一个常数,或者是来自一个表里的多表查询的结果值 |
| ref_or_null | 如同ref, 但是MySQL必须在初次查找的结果里找出null条目,然后进行二次查找。 |
| index_merge | 说明索引合并优化被使用了。 |
| unique_subquery | 在某些IN查询中使用此种类型,而不是常规的ref:value IN (SELECT primary_key FROM single_table WHERE some_expr) |
| index_subquery | 在某些IN查询中使用此种类型,与unique_subquery类似,但是查询的是非唯一性索引:value IN(SELECT key_column FROM single_table WHERE some_expr) |
| range | 只检索给定范围的行,使用一个索引来选择行。key列显示使用了哪个索引。当使用=、<>、>、>=、<、<=、IS NULL、<=>、BETWEEN或者IN操作符,用常量比较关键字列时,可以使用range。 |
| index | 全表扫描,只是扫描表的时候按照索引次序进行而不是行。主要优点就是避免了排序,但是开销仍然非常大。 |
| all | 最坏的情况,从头到尾全表扫描。 |
| 项 | 说明 |
|---|---|
| possible_keys | 指出MySQL能在该表中使用哪些索引有助于查询。如果为空,说明没有可用的索引。 |
| 项 | 说明 |
|---|---|
| key | MySQL实际从possible_key选择使用的索引。如果为NULL,则没有使用索引。很少的情况下,MYSQL 会选择优化不足的索引。这种情况下,可以在SELECT语句中使用USE INDEX (indexname)来强制使用一个索引或者用IGNORE INDEX(indexname)来强制MYSQL忽略索引 |
| 项 | 说明 |
|---|---|
| key_len | 使用的索引的长度。在不损失精确性的情况下,长度越短越好。 |
| 项 | 说明 |
|---|---|
| ref | 显示索引的哪一列被使用了 |
| 项 | 说明 |
|---|---|
| rows | MYSQL认为必须检查的用来返回请求数据的行数 |
extra 中出现以下2项意味着MYSQL根本不能使用索引,效率会受到重大影响。应尽可能对此进行优化。
| extra项 | 说明 |
|---|---|
| Using filesort | 表示MySQL会对结果使用一个外部索引排序,而不是从表里按索引次序读到相关内容。可能在内存或者磁盘上进行排序。MySQL中无法利用索引完成的排序操作称为“文件排序” |
| Using temporary | 表示MySQL在对查询结果排序时使用临时表。常见于排序order by和分组查询 group by。 |
Explain的更多相关文章
- SQL Tuning 基础概述02 - Explain plan的使用
1.explain plan的使用 SQL> explain plan for delete from t_jingyu; Explained. SQL> select * from ta ...
- mongodb之使用explain和hint性能分析和优化
当你第一眼看到explain和hint的时候,第一个反应就是mysql中所谓的这两个关键词,确实可以看出,这个就是在mysql中借鉴过来的,既然是借鉴 过来的,我想大家都知道这两个关键字的用处,话不多 ...
- 1205索引使用explain
-- 转自博客http://blog.sina.com.cn/s/blog_75a2f94f0101ddhb.html01type类型type按照从最佳类型到最坏类型进行排序,该字段和ref字段相结合 ...
- mysql的explain学习
explain是用来获取sql执行计划的信息. 上面是一个最简单的sql分析.下面来分析每列的意思. ①id ②select_type ③ table ④type ⑤possible_key ⑥ke ...
- 分析oracle的执行计划(explain plan)并对对sql进行优化实践
基于oracle的应用系统很多性能问题,是由应用系统sql性能低劣引起的,所以,sql的性能优化很重要,分析与优化sql的性能我们一般通过查看该sql的执行计划,本文就如何看懂执行计划,以及如何通过分 ...
- 【转载】 mysql explain用法
转载链接: mysql explain用法 官网说明: http://dev.mysql.com/doc/refman/5.7/en/explain-output.html 参数: htt ...
- 【转】Oracle 执行计划(Explain Plan) 说明
转自:http://blog.chinaunix.net/uid-21187846-id-3022916.html 如果要分析某条SQL的性能问题,通常我们要先看SQL的执行计划,看看SQ ...
- MySQL中EXPLAIN命令详解
explain显示了mysql如何使用索引来处理select语句以及连接表.可以帮助选择更好的索引和写出更优化的查询语句. 使用方法,在select语句前加上explain就可以了: 如: expla ...
- 【夯实Mysql基础】mysql explain执行计划详解
原文地址 1).id列数字越大越先执行,如果说数字一样大,那么就从上往下依次执行,id列为null的就表是这是一个结果集,不需要使用它来进行查询. 2).select_type列常见的有: A ...
- MySQL慢查询Explain Plan分析
Explain Plan 执行计划,包含了一个SELECT(后续版本支持UPDATE等语句)的执行 主要字段 id 编号,从1开始,执行的时候从大到小,相同编号从上到下依次执行. Select_typ ...
随机推荐
- R语言︱H2o深度学习的一些R语言实践——H2o包
每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- R语言H2o包的几个应用案例 笔者寄语:受启发 ...
- Error 1313: RETURN is only allowed in a FUNCTION SQL Statement
1.错误描述 14:07:26 Apply changes to rand_string Error 1313: RETURN is only allowed in a FUNCTION SQL St ...
- 关于spring的aop拦截的问题 protected方法代理问题
看到一篇很好的Spring aop 拦截方法的问题, 原文地址. 问题 貌似不能拦截私有方法? 试了很多次,都失败了,是不是不行啊? 我想了一下,因为aop底层是代理, jdk是代理接口,私有方法必 ...
- java——基础语法
java基础语法 1.关键字:java赋予特殊含义的单词. 2.标识符:程序中开发人员自定义的名词,例如:类名,函数名,变量名(注意事项:①不能以阿拉伯数字开头②不能采用关键字). 3.常量:固定的数 ...
- View的平移、缩放、旋转以及位置、坐标系
原创 2015年05月12日 13:15:29 标签: Android / Scroll / Scale / Translation / Rotation 24733 Android开发中,经常会接触 ...
- 一次SQL慢查询的优化处理
背景 在开发完成,数据验证的过程中,需要对两个非常大的表进行query,运行了十几分钟都跑不完.如下: select * from big_a a, big_b b where a.some_id = ...
- 【BZOJ1018】堵塞的交通(线段树)
[BZOJ1018]堵塞的交通(线段树) 题面 Description 有一天,由于某种穿越现象作用,你来到了传说中的小人国.小人国的布局非常奇特,整个国家的交通系统可 以被看成是一个2行C列的矩形网 ...
- [UVA 10529]Dumb Bones
题面在这里 题意 放\(n\)个相连的骨牌,每次放的时候有\(pl\)的概率往左倒,有\(pr\)的概率往右倒,骨牌倒的时候可能会打翻左边相邻或者右边相邻的骨牌,并引起连锁反应直到最后一个骨牌旁边没有 ...
- LINUX下解决TIME_WAIT等网络问题
修改配置文件 /etc/sysctl.conf net.ipv4.tcp_tw_reuse = 1net.ipv4.tcp_tw_recycle = 1net.ipv4.tcp_fin_timeout ...
- 在线教育平台搭建 预览和models
一.前言 1.1.项目介绍 在线演示地址:mxonline.mtianyan.cn 开发环境: python:3.6.4 Django:2.0.2 后台管理:xadmin 系统概括: 系统具有完整的用 ...