Mysql执行计划-看这一篇就够了
目录
1. 概述
2. 执行计划使用
2.1.执行计划详解
2.1.1. 执行计划-ID
2.1.2.执行计划select_type
2.1.3.执行计划-table
2.1.4.执行计划-type
2.1.5.执行计划possible_key和key
2.1.6.执行计划key_len
2.1.7.执行计划ref
2.1.8.执行计划rows
2.1.9.执行计划Extra
1. 概述
在平时的开发工作中,少不了数据库的使用,那么就会涉及到sql语句,如何知道sql语句执行的过程,以及sql语句执行的性能,通过执行计划模拟优化器执行sql进行分析
2. 执行计划使用
语法:EXPLAIN/DESC + SQL语句
例如:explain select * from user;
执行计划输出内容:
EXPLAIN SELECT * FROM test_tb1;
执行计划id、查询类型、查询表、分区,索引使用情况、表之间的引用等
2.1.执行计划详解
2.1.1. 执行计划-ID
select查询序列号,如果id相同,则从上到下顺序执行,如果不相同,序列号大的优先级比较高,先执行
ID相同:
EXPLAIN SELECT * FROM t1,t2,t3 WHERE t1.`id`=t2.`t1_id` AND t2.`id`=t3.`t2_id`;
ID不同:
EXPLAIN SELECT t1.* FROM t1 WHERE t1.`id`=
(SELECT t2.`t1_id` FROM t2 WHERE t2.`id`=
(SELECT t3.`t2_id` FROM t3 WHERE t3.`id`=1));
2.1.2.执行计划select_type
查询类型主要用来说明查询的类型:普通查询、联合查询、子查询等
序号 | select_type | 说明 |
1 | SIMPLE | 简单的查询,查询中不饱和子查询或者Union |
2 | PRIMARY | 查询中包含任何复杂的子查询,最外层的查询类型为PRIMARY |
3 | SUBQUERY | SELECT或者where中包含子查询 |
4 | DERIVED | 在from中包含子查询被标记为DERIVED(衍生),Mysql会递归查询这些子查询,将查询结果放入临时表 |
5 | UNION | 第二个select中查询UNION,则被标记为UNION,如果UNION出现在from子查询中,最外层被标记为DERIVED |
6 | UNION RESULT | 从UNION表获取结果的select |
SIMPLE举例:
sql语句:EXPLAIN SELECT * FROM t1;
PRIMARY、SUBQUERY举例:
sql语句: EXPLAIN SELECT id,(SELECT NAME FROM t2 WHERE t2.`id`=1) FROM t1;
2.1.3.执行计划-table
表示查询数据所在的表
2.1.4.执行计划-type
type代表访问类型,是判断sql执行性能比较关键的一个字段,性能从高到低依次是:
system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL
system:表示只有一条数据,类似于系统表,是const的一种特例
const:表示通过索引一次就查询到数据,比较块,用于primary key(主键)和unique唯一索引
eq_ref:用于“=”运算符比较的索引列
EXPLAIN SELECT * FROM t1,t2 WHERE t1.id = t2.id;
ref:非唯一索引扫描
rang:检索给的范围的值,使用一个索引进行选择,where后面使用between、>、<、in等
EXPLAIN SELECT * FROM t1 WHERE id > 0;
index:当前查询的结果全部为索引列,虽然也是全部扫描,但是只查询索引数据,没有之间查询数据
EXPLAIN SELECT id FROM t1 WHERE id > 0;
all:遍历全部查询
EXPLAIN SELECT * FROM t1;
2.1.5.执行计划possible_key和key
possible_key:可能使用的索引
key:实际使用的索引,如果为null,表示没有用到索引
2.1.6.执行计划key_len
表示索引中使用的字节数,可以根据这个字段计算查询中索引使用的长度,长度越短越好。
2.1.7.执行计划ref
表示索引的哪一列被使用
根据ref可以看出test库的t1表的id索引被使用
2.1.8.执行计划rows
根据表统计信息和索引选用情况,大致计算出查询到所需数据需要查询的行数
2.1.9.执行计划Extra
using where:表示使用了where过滤
using index:表示使用了覆盖索引,避免使用表数据
using join buffer:表示使用了链接缓存
Mysql执行计划-看这一篇就够了相关推荐
- Mysql全面总结(看这一篇就够了)
声明:本文参考三太子敖丙的<Mysql总结> 断断续续看了许多mysql的文章,留在脑海的就是 事务 索引 集群 本文就梳理下所学的知识 1.存储引擎 1.1 InnoDB InnoDB ...
- Mysql 备份恢复看这一篇就够了
Mysql 备份恢复 一.备份分类.备份策略 1.1 造成数据丢失的原因: 程序错误 人为操作错误 运算错误 磁盘故障 灾难(如火灾.地震)和盗窃 1.2 数据库备份的分类 1)物理备份:对数据库操作 ...
- mysql执行计划缓存在哪_怎么去看懂mysql的执行计划
mysql的查看执行计划的语句很简单,explain+你要执行的sql语句就OK了. 举一个例子 EXPLAIN SELECT * from employees where employees.gen ...
- 怎么看mysql执行计划
前言 mysql是关系型数据库中比较流行的一款数据库.在工作中使用mysql,难免会遇到sql执行缓慢的情况.这时候,我们就需要查看sql的执行计划,以此来分析sql执行缓慢的问题所在. 如何查看my ...
- 理解索引:MySQL执行计划详细介绍
为什么80%的码农都做不了架构师?>>> 最近有个需求,要修改现有存储结构,涉及查询条件和查询效率的考量,看了几篇索引和HBase相关的文章,回忆了相关知识,结合项目需求,说说 ...
- MySQL执行计划(MySQL调优的重要利器)
文章目录 看完本篇文章你能学到什么? 一.MySQL执行计划 1.1 id字段 1.2 select_type 字段 1.3 table 字段 1.4 partitions 字段 1.5 type字段 ...
- mysql 执行计划extra_mysql执行计划explain type和extra
mysql执行计划,搞定type和extra就能优化大部分sql了.type为主,extra为辅. type: system表只有一行,MyISAM引擎. const常量连接,表最多只有一行匹配,通用 ...
- [数据库] ------ mysql 执行计划
mysql 执行计划 简单来说,mysql整体架构分为三块:应用层,逻辑层,物理层 应用层:负责与客户端交互,建立连接,返回数据,响应请求. 逻辑层:负责查询处理,事务管理等 物理层:实际物理磁盘上存 ...
- Mysql执行计划含义,mysql执行计划介绍
烂sql不仅直接影响sql的响应时间,更影响db的性能,导致其它正常的sql响应时间变长.如何写好sql,学会看执行计划至关重要.下面我简单讲讲mysql的执行计划,只列出了一些常见的情况,希望对大家 ...
最新文章
- 有的时候入门只是一瞬间
- DiscoveryService.getRemoteAdvertisements是否会获得本地通告?
- css居中最佳方案,CSS 水平、垂直居中的5种最佳方案
- springboot jar包运行中获取资源文件
- IIS反向代理/Rewrite/https卸载配置
- 面试题:怎么以最快速度计算8*4:
- you-get下载酷我音乐付费歌曲
- 五分钟学会安装电脑操作系统
- JavaScript学习手册五:JS数组
- mysql 查询优化实验报告_数据库优化查询实验报告.docx
- 通过Excel对各个商品的销售分析
- Revit二开 VS附加Revit时闪退程序
- 进阶 - Git的标签管理
- 南加大计算机本科学费,南加州大学学费多少 本科研究生学费介绍
- win10系统dnf安装不上服务器失败,win10 1903系统dnf图表系统组建失败的修复方法
- 简述覆盖表(Covering Arrays)
- RTSP/RTMP/GB28181协议/海康SDK/Ehome协议接入TSINGSEE青犀视频平台磁盘空间计算介绍
- 明代宫禁混乱:道士钻空子混宫中与宫女通奸
- 50套html网站模板,涵盖很多行业,各种类型html网站,各种行业html网站模板下载
- 三大运营商实现本机号码一键登录原理与应用
热门文章
- 批处理命令之find 和findstr
- python实现简单进度条_简单实现python进度条脚本
- 使用JAVA流操作(POI)将Excel表中数据取出,并直接生成完整SQL语句
- PS图片操作简单方法:
- 关于web安全测试在功能测试中的应用
- python中如何定义数组_python如何创建数组?
- 路由配置与管理——OSPF路由配置与管理1
- 阿里云服务器Linex系统搭建Tomcat部署Web项目
- tmall.item.outerid.update( 天猫商品/SKU商家编码更新接口 )
- java设计模式--2.原型模式