SQL高级优化(五)之执行计划
一、explain
- 执行计划:在MySQL中可以通过explain关键字模拟优化器执行SQL语句,从而知道MySQL是如何处理SQL语句的。
- explain:MySQL执行计划的工具,查看MySQL如何设定执行计划。
- 老版本MySQL中explain分为两类(在MySQL5.7中已经不再区分)
- explain extended:会在explain的基础上额外提供一些查询优化的信息。紧随其后通过show warnings命令可以得到优化后的查询语句,从而优化器优化了什么。额外还有filtered列,是一个半分比的值,rows * filtered/100可以估算出将要和explain中前一个表进行连接的行数(前一个表指explain中的id值比当前表id值小的表)。
- explain partitions:相比explain多了个partitions字段,如果查询是基于分区表的话,会显示查询将访问的分区。
- 使用语法:
- 在查询语句之前添加explain即可(默认explain partitions)
 

- 紧跟show warnings可以查看优化器优化效果(两条SQL语句要一起执行)

- 使用show warnings很有必要,explain是按照优化器优化后的结果进行显示的。

二、explain字段解释
- id:查询执行顺序
- id值相同时表示从上向下执行
- id值相同被视为一组
- 如果是子查询,id值会对增
- select_type:查询类型,主要用于区分普通查询、联合查询、子查询等
- SIMPLE:简单查询,只要不是子查询和union都属于简单查询
explain select * from teacher where id=5;
- PRIMARY:复杂查询中最外层查询mysql explain select * from (select * from student limit 0,1) t;
- DERIVED(衍生):from从句中的子查询mysql explain select * from (select * from student limit 0,1) t;

- SUQUERY:在select或where从句中包的子查询mysql
explain select * from sudent where id = (select id from student limit 0,1;)
explain select *,(seelct id from student where id=3) from student;
show warnings;

- UNION:分为如下几种情况
- 两个select查询时前一个标记为PRIMARY,后一个标记为UNION
 
- 两个select查询时前一个标记为PRIMARY,后一个标记为UNION
explain select * from studet where id = 1 or id = 2 union select * from student where id = 2 or id = 3 or id = 4;

- union出现在from从句子查询中,外层select标记为 PIRMARY,union中第一个查询为DERIVED,第二个子查询标记为UNION
 
- union出现在from从句子查询中,外层select标记为 PIRMARY,union中第一个查询为DERIVED,第二个子查询标记为UNION
EXPLAIN select * from (select * from studnet where id = 1 or id = 2 union select * from studentwhere id = 2 or id = 3 or id = 4) ut;
- UNION RESULT:从union表获取结果的select 
- partitions:如果查询是基于分区表的话,会显示查询将访问的分区
- table:查询的哪个表
- type:查询类型,SQL优化中非常重要的指标
- 从好到坏排序。一般要求至少是range级别,最好能达到ref级别
system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL
- system:表中只有一行数据。属于const的特例,如果物理表中就一行数据为ALL
explain select * from (select * from student liit 0, 1) t;
- const:查询结果最多有一个匹配航。因为只有一行,所以可以被视为常量。const查询速度非常快,因为制度一次。一般情况下把逐渐或唯一索引作为唯一条件的查询都是ocnst
mysql explain select * from teacher where id = 55;
- eq_ref:查询时查询外键表全部数据,且只能查询主键列或关联列,且外键表中外键列中数据不能有重复数据,且这些数据都必须在主键表中有对应数据(主键表中数据可以有没有用到的)
- ref:相比eq_ref,不对外键列有强制要求,里面的数据可以重复,只要出现重复的数据取值就是ref。也可能是索引查询。
- range:把这个列当做条件质检所其中一个范围。常见where从句中出现between、<、in等,主要应用在具有索引的列中。
explain select * from student where id between 1 and 5;
- index:Full Index Scan,index与ALL区别为index类型只遍历索引树。这通常为ALL块,因为索引文件通常比数据文件小。(Index与ALL虽然都是读全表,但index是从索引中读取,而ALL是从硬盘读取)
- ALL:Full Table Scan,遍历全表以找到匹配的行
- possible_type:查询条件字段涉及到的索引,可能没有使用
- key:实际使用了的索引
- key_ken:表示索引中使用的字节数,查询中使用的索引的长度(最大可能长度),并非实际使用长度,理论上长度越短越好。key_len是根据表定义计算而得的,不是通过表内检索出的。
- ref:显示索引的哪一列被使用了,如果可能,是一个常量const。
- rows:根据表统计信息及索引选用情况,大致估算找到所需的记录所需要读取的行数
- filtered:显示了通过条件过滤出的行数的百分比估计值
- Extra:不适合在其他字段中显示,但是十分重要的额外信息
- Distinct:MySQL发现第1个匹配航后,停止为当前的行组合搜索更多的行。
- Not exists: MySQL能够对查询进行LEFT JOIN优化,发现1个匹配LEFT JOIN标准的杭后,不再为前面的行组合在该表内检查更多的行。
- range checked for each record(index map:#): MySQL没有发现号的可以使用的索引,但发现如果来自前面的表的列值已知,可能部分索引可以使用。
- Using filesort:MySQL需要额外的一次传递,以找出如何按排序顺序检索行。
- Using index:从只使用索引树中的信息而不需要进一步搜索读取实际的行来检索表中的列信息。
- Using temporary:为了解决查询,MySQL需要创建一个临时表来容纳结果。
- Using where:WHERE 子句用于限制哪一个行匹配下一个表或发送到客户。
- Using sort_union(…), Using union(…), Using intersect(…):这些函数说明如何为index_merge联接类型合并索引扫描。
- Using index for group-by:类似于访问表的Using index方式,Using index for group-by表示MySQL发现了一个索引,可以用来查 询GROUP BY或DISTINCT查询的所有列,而不要额外搜索硬盘访问实际的表。
SQL高级优化(五)之执行计划的更多相关文章
- Oracle 课程五之优化器和执行计划
		课程目标 完成本课程的学习后,您应该能够: •优化器的作用 •优化器的类型 •优化器的优化步骤 •扫描的基本类型 •表连接的执行计划 •其他运算方式的执行计划 •如何看执行计划顺序 •如何获取执行计划 ... 
- SQL高级优化系列
		目录 SQL高级优化系列(一)之MySQL优化 SQL高级优化系列(二)之MySQL架构 SQL高级优化系列(三)之存储引擎 SQL高级优化系列(四)之SQL优化 SQL高级优化系列(五)之执行计划 ... 
- PL/SQL Developer 查看查询的执行计划
		https://zhuanlan.zhihu.com/p/65771352 通过 PL/SQL Developer 查看查询的执行计划 1 什么是执行计划 执行计划是一条查询语句在 Oracle 中的 ... 
- [sqlserver脚本]查看指定SQL语句生成了哪些执行计划
		参考SQL技术内幕写了一段脚本,可以通过这段脚本查看执行指定SQL语句后,系统生成了哪些执行计划.使用时注意以下几点: 修改use MyTest,换成自己的数据库名字. 将 exec sp_page_ ... 
- mysql之优化器、执行计划、简单优化
		mysql之优化器.执行计划.简单优化 2018-12-12 15:11 烟雨楼人 阅读(794) 评论(0) 编辑 收藏 引用连接: https://blog.csdn.net/DrDanger/a ... 
- Oracle 固定执行计划-使用SPM(Sql Plan Management)固定执行计划
		固定执行计划-使用SPM(Sql Plan Management)固定执行计划 转载自:http://www.lunar2013.com/2016/01/固定执行计划-使用spm%EF%BC%88sq ... 
- Mysql SQL优化系列之——执行计划连接方式浅释
		关系库SQL调优中,虽然思路都是一样的,具体方法和步骤也是大同小异,但细节却不容忽视,尤其是执行计划的具体细节的解读中,各关系库确实有区别,特别是mysql数据库,与其他关系库的差别更大些,下面,我们 ... 
- SQL高级优化(一)之MySQL优化
		不同方案效率对比 MySQL各字段默认长度(一字节为8位) 整型: TINYINT 1 字节 SMALLINT 2 个字节 MEDIUMINT 3 个字节 INT 4 个字节 INTEGER 4 个字 ... 
- SQL高级优化(六)之MySQL索引
		一.索引概述 1. 索引的优点  为什么要创建索引?这是因为,创建索引可以大大提高系统的查询性能.如果不使用索引,查询时从第一行开始查询.如果使用了索引,所以就可以更加快速的找到希望的数据. 第一. ... 
随机推荐
- 关于Mysql java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)的问题
			问题所在: 1.连接数据库一个是密码是否正确, 2.driver是否对, 3.有么有jar包冲突, 
- 『学了就忘』Linux系统管理 — 84、Linux中进程的管理
			目录 1.Linux系统中的信号 2.杀掉进程的命令 (1)kill命令 (2)killall命令 (3)pkill命令 1.Linux系统中的信号 Linux系统中可以识别的信号较多,我们可以使用命 ... 
- ctfshow 红包题 武穆遗书
			偶然见看到这道题,就下载了看了看.确实是我自己的逆向能力不够,逆不动.但是我似乎找到了非预期... 下载程序,ida打开,发现不对.后来发现是加了upx壳,拿软件去一下.再次ida打开. 其中buff ... 
- CF946B Weird Subtraction Process 题解
			Content 有两个数 \(a,b\),执行如下操作: 如果 \(a,b\) 中有一个数是 \(0\),结束操作,否则跳到操作 \(2\). 如果 \(a\geqslant 2b\),那么 \(a\ ... 
- LuoguP7859 [COCI2015-2016#2] GEPPETTO 题解
			Content 有 \(n\) 个数 \(1\sim n\).你需要在其中选若干个数.但是还有 \(m\) 个限制,第 \(i\) 个限制格式为 \(a_i\) 不能和 \(b_i\) 一起选.问你一 ... 
- Shell之Sed常用用法
			匹配某字符串开头的行,整行替换 文本原内容 目的: SELINUX= 整行替换为SELINUX=disabled # grep -Ev '^$|^#' /etc/selinux/config SELI ... 
- JAVA从URL参数链接中获取指定参数的值
			import java.util.HashMap; import java.util.Map; /** * @author yvioo */ public class UrlUtils { /** * ... 
- lldb调试C++总结(1)
			Note 好记性不如烂笔头.时间一长,lldb的基本功快忘本了. 本文将介绍使用 lldb 调试 C++程序的基本用法. 演示基于 Ubuntu + lldb lldb + clang(++) 版本 ... 
- 【LeetCode】20. Valid Parentheses 有效的括号
			作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 个人公众号:负雪明烛 本文关键词:有效,括号,括号匹配,栈,题解,leetcode, 力扣 ... 
- 【LeetCode】576. Out of Boundary Paths 解题报告(Python)
			作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 动态规划 状态搜索 记忆化搜索 相似题目 参考资料 ... 
