EXPLAIN详解

SQL编写和解析

编写过程
select…distinct…from…join…on…where…group by…having…order by…limit…
解析过程
from…on…join…where…group by…having…select distinct…order by…limit…

执行计划:

mysql> explain select * from study s left join course c on c.age = s.snum where s.snum >50;
+----+-------------+-------+------------+------+---------------+-------+---------+-------------+------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-------+------------+------+---------------+-------+---------+-------------+------+----------+-------------+
| 1 | SIMPLE | s | NULL | ALL | NULL | NULL | NULL | NULL | 2000 | 33.33 | Using where |
| 1 | SIMPLE | c | NULL | ref | i_age | i_age | 5 | mydb.s.snum | 494 | 100.00 | NULL |
+----+-------------+-------+------------+------+---------------+-------+---------+-------------+------+----------+-------------+

1、id

  • id值相同,执行顺序由上至下;
  • id值不同,优先执行值较大的查询(本质:在嵌套子查询时,先查内层,再查外层)

2、select type

primary
包含子查询SQL中的主查询(最外层)
subquery
包含子查询SQL中的子查询(非最外层)
simple
简单查询(不包含子查询、union)
derived
衍生查询
a、在from子查询中中有一张表
b、在from子查询中,如果有table1 union table2,则table1就是derived

3、table

  • 查询使用的表

4、type(查询效率从上至下递减)

system
只有一条数据的系统表或衍生表只有一条数据的主查询
const
仅能查到一条数据的SQL,用于Primary key 或unique index
eq_ref
唯一性索引:对于每个索引键的查询,返回匹配唯一行的数据(有且只有1个,不能多,不能0),常见于primary key 和 unique key
ref
非唯一性索引,对于每个索引键的查询,返回匹配的所有行(0,多)
range
检索指定范围的行,where后面时一个范围查询(between,< >=,in有时候会失效,转为无索引查询)
index
扫描索引中的全部数据
all
扫描全表数据

5、ref

  • 指明当前表所参照的字段

6、key_len

索引长度,常用于判断复合索引是否被完全使用:
a、在utf8中,1个字符占3个字节,char(20)使用60字节;
b、如果索引字段可以为null,会用1个字节用于标识;
c、用两个字节标识可变长度, varchar(20) 使用62字节

7、possible keys

  • 可能用到的索引

8、key

  • 实际使用的索引

9、rows

  • 实际通过索引查询的数据个数

10、extra

  • using filesort

    order by 使用了文件排序
  • using temporary

    group by 使用了临时表
  • using where

    回表查询
  • using index

    使用了索引覆盖
  • impossible where

    不可能实现的where查询
  • using join buffer

    mysql使用了连接缓存
  • block nested-loop join

    使用了块嵌套循环

2.mysql explain命令详解的更多相关文章

  1. 转载:MySQL EXPLAIN 命令详解学习

    转载自:https://blog.csdn.net/mchdba/article/details/9190771 MySQL EXPLAIN 命令详解 MySQL的EXPLAIN命令用于SQL语句的查 ...

  2. MySQL EXPLAIN 命令详解

    MySQL EXPLAIN 命令详解 MySQL的EXPLAIN命令用于SQL语句的查询执行计划(QEP).这条命令的输出结果能够让我们了解MySQL 优化器是如何执行SQL 语句的.这条命令并没有提 ...

  3. MySQL Explain命令详解--表的读取顺序,数据读取操作的类型等

    表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度(key_len显示的值为索引字段的最大可能长度,并非实际使用长度,即key_len是根据表定义计算而得,不是通过表内检索出的) 不损失精确 ...

  4. MySQL EXPLAIN 命令详解学习

    http://blog.csdn.net/mchdba/article/details/9190771

  5. 一次浴火重生的MySQL优化(EXPLAIN命令详解)

    一直对SQL优化的技能心存无限的向往,之前面试的时候有很多面试官都会来一句,你会优化吗?我说我不太会,这时可能很多人就会有点儿说法了,比如会说不要使用通配符*去检索表.给常常使用的列建立索引.还有创建 ...

  6. 【MySQL】EXPLAIN命令详解

    具体参考: https://www.cnblogs.com/gomysql/p/3720123.html 原文如下: 在工作中,我们用于捕捉性能问题最常用的就是打开慢查询,定位执行效率差的SQL,那么 ...

  7. SQL中EXPLAIN命令详解---(转)

    MySQL Explain详解   在日常工作中,我们会有时会开慢查询去记录一些执行时间比较久的SQL语句,找出这些SQL语句并不意味着完事了,些时我们常常用到explain这个命令来查看一个这些SQ ...

  8. EXPLAIN 命令详解

    在工作中,我们用于捕捉性能问题最常用的就是打开慢查询,定位执行效率差的SQL,那么当我们定位到一个SQL以后还不算完事,我们还需要知道该SQL的执行计划,比如是全表扫描,还是索引扫描,这些都需要通过E ...

  9. Mysql常用命令详解

    Mysql安装目录 数据库目录 /var/lib/mysql/ 配置文件 /usr/share/mysql(mysql.server命令及配置文件) 相关命令 /usr/bin(mysqladmin ...

随机推荐

  1. 07_ListView

    ListView是用来显示一个列表的控件,它在Android源代码中是继承AbsListView类的,AbsListView类是继承于AdapterView类的,而AdapterView类是继承Vie ...

  2. 从0开始带你成为JVM实战高手(百度网盘)

    狸猫技术窝<从0开始带你成为JVM实战高手> 之前写过几篇 JVM 相关的文章,最近复盘的时候,发现狸猫技术窝<从0开始带你成为JVM实战高手>真的不错,然后就在网上找了一下( ...

  3. 浅尝 Elastic Stack (一) Elasticsearch、Kibana、Beats 安装

    Elastic Stack 包括 Elasticsearch.Kibana.Beats 和 Logstash,也称为 ELK Stack.能够安全可靠地获取任何来源.任何格式的数据,然后实时地对数据进 ...

  4. java简单的实现搜索框的下拉显示相关搜索功能

    最近做了一个简单的搜索框下面下拉显示相关搜索的功能,有点模仿百度的下拉展示相关搜索 先上个展示图 : 点击进入演示地址,大家可以输入长点的搜索,点击搜索,再输入之前搜索词的前面部分,看是否能展示出来 ...

  5. MySQL——一致性非锁定读(快照读)&MVCC

    MySQL--一致性非锁定读(快照读) MySQL数据库中读分为一致性非锁定读.一致性锁定读 一致性非锁定读(快照读),普通的SELECT,通过多版本并发控制(MVCC)实现. 一致性锁定读(当前读) ...

  6. ubantu+nginx+uwsgi+django部署

    1.更新ubantu的apt apt-get update 必要时候更新系统:      apt-get upgrade 2.远程连接服务器 ssh 用户名@ip 上传代码 :        scp ...

  7. Python中sort、sorted的cmp参数废弃之后使用cmp_to_key实现类似功能

    Python2.1以前的排序比较方法只提供一个cmp比较函数参数,没有__lt__等6个富比较方法, Python 2.1引入了富比较方法,Python3.4之后作废了cmp参数.相应地从Python ...

  8. PyQt(Python+Qt)学习随笔:模式窗口的windowModality属性与modal属性

    windowModality属性 windowModality属性只对窗口对象有效,保存的是哪些类型的窗口被模式窗口阻塞. 模式窗口防止其他窗口中的部件获取输入.此属性的值控制对应窗口可见时阻塞哪些类 ...

  9. APP软件系统测试

    1.功能模块测试 2.交叉事件测试 3.压力测试 存储压力测试 边界压力测试 响应能力压力测试 网络流量测试 4.容量测试 5.安装卸载测试 6.易用性.用户体验测试 7.UI界面测试

  10. Python追加文件内容

    测试中需要造几百个账号,写了个脚本可以自动生成账号,但想把生成的账号写入一个文件, 开始用的如下的write()方法,发下会先把原文件的内容清空再写入新的东西,文件里面每次都是最新生成的一个账号 mo ...