MySQL进阶之路(二十)—— 5分钟看懂SQL的执行计划
5分钟看SQL的执行计划
一、概述
如果你想优化SQL语句,那么SQL执行计划就是必须要知道的,因为只有通过SQL的执行计划,你才可以知道SQL是如何进行查询的,以及否走索引、用的是什么索引、是否进行了排序又是如何排序的等等信息。
在应用层面其实就是在SQL语句前面加上Explain
,我在前面的文章中有涉及到这个的使用,但是没有细说,今天我们专门来讲一讲这个Explain输出的信息都是什么意思
二、Explain输出的列
列 | 意义 |
---|---|
id |
该SELECT 标识符
|
select_type |
该SELECT 类型
|
table | 输出行的表 |
partitions | 匹配的分区 |
type | 联接类型 |
possible_keys | 可供选择的可能索引 |
key | 实际选择的索引 |
key_len | 所选密钥的长度 |
ref | 与索引比较的列 |
rows | 要检查的行的估计 |
filtered | 按表条件过滤的行百分比 |
Extra | 附加信息 |
举例
这里为了大家能够理解,我举一个例子:
第二列的select_type
,这里的SIMPLE
表示简单查询,也就是说没有使用UNION或者子查询
第四列的type
很重要,可以通过这个判断SQL的执行速度以及是否使用索引和使用的是什么索引
第五列的possible_keys
顾名思义,也就是对于此次查询可供选择的key
第六列的key
就是真正使用的索引,在这个例子中使用的是PRIMARY
主键索引
第七列的key_len
也就是使用的键的长度
第八列的ref
表示的是和索引比较的列是如何使用索引的(因为一个查询的where条件中可能使用到多个索引)
三、根据type分析使用的索引
type
列最常见的值有如下几种:
const
使用
PRIMARY KEY
或UNIQUE
索引,通俗的说就是使用了唯一索引(获取到的是单行数据),这个算是最快的了ref
要比
const
慢一些,使用的不是唯一索引(获取到的可能有多行数据),比如仅仅使用了键的最左前缀键或者普通索引例子:
可以通过row
这一列看到,查询出来了2条数据
ref or null
与ref有点类似,不一样的是MySQL会额外去搜索有NULL值的行
例子:
在使用普通索引的时候还加上了 IS NULL
这一条件
注意:普通索引的这个字段在设计表结构的时候没有设置IS NOT NULL
index
这个表示只是遍历了二级索引,也就是没有进行回表查询,就是之前文章说过的
索引覆盖
注:如果使用二级索引进行全表扫描
range
这个很简单,其实就是范围查询
all
这个其实没什么好说的,其实就是全表扫描,是最慢的那一种
四、小结
range
这个很简单,其实就是范围查询
all
这个其实没什么好说的,其实就是全表扫描,是最慢的那一种
四、小结
其实对于我们优化SQL,尤其是查询语句,其实最核心的就是希望尽可能的使用到索引,尽可能少的全表扫描,为了知道SQL是否使用到了索引,我们需要去查看执行计划,,因此本篇文章才会特别关心type
列输出的内容。通过Explain
观察SQL的执行计划,去设计适合业务需求的索引。
MySQL进阶之路(二十)—— 5分钟看懂SQL的执行计划相关推荐
- Docker最全教程之MySQL容器化 (二十四)
Docker最全教程之MySQL容器化 (二十四) 原文:Docker最全教程之MySQL容器化 (二十四) 前言 MySQL是目前最流行的开源的关系型数据库,MySQL的容器化之前有朋友投稿并且写过 ...
- 零基础带你学习MySQL—unique 唯一(二十五)
零基础带你学习MySQL-unique 唯一(二十五) unqiue 使用细节 如果没有指定 not null 则 unique 字段可以有多个 null 如果一个列(字段) 是 unique not ...
- Android进阶知识(二十五):Bitmap简介及其高效加载
Android进阶知识(二十五):Bitmap简介及其高效加载 一.Bitmap Bitmap代表一个位图,在Android中指的是一张图片,可以是png.jpg等格式的图片.BitmapDraw ...
- ES7、ES8、ES9、ES10、ES11、ES12、ES13、ES14(ES进阶之路二)
简介 JavaScript是世界上发展最快的编程语言之一,不仅可以用于编写运行在浏览器的客户端程序,随着Node.js的发展,JavaScript也被广泛应用于编写服务端程序.而随着JavaScrip ...
- Mysql进阶学习(二)条件查询
Mysql进阶学习(二)条件查询 进阶2:条件查询 一.按条件表达式筛选 案例1:查询工资>12000的员工信息 案例2:查询部门编号不等于90号的员工名和部门编号 二.按逻辑表达式筛选 案例1 ...
- 六级考研单词之路-二十
title: 六级考研单词之路-二十 date: 2020-12-07 12:07:45 tags: 六级考研单词之路 Day20 1.chemistry[n.化学] eg: She chose to ...
- 六级考研单词之路-二十八
title: 六级考研单词之路-二十八 date: 2020-12-17 12:29:40 tags: 六级考研单词之路 Day28 1.up[adv.向上] eg: Put the packet u ...
- Ubuntu 服务器开机后二十多分钟远程连接自动断掉(自动挂起)
0x00 问题描述 近日实验室新进了一批服务器,有幸分到了一台3090的.安装nvidia驱动后重启了一下,刚开始还正常能用,过了二十来分钟,远程桌面连接自动断掉了,ssh连接也连接不上,Ping I ...
- 六级考研单词之路-二十六
title: 六级考研单词之路-二十六 date: 2020-12-15 16:43:28 tags: 六级考研单词之路 Day26 1.big[adj.大的] 2.bloody[n.流血的,血腥的] ...
最新文章
- flask中使用FileField上传文件的两种方式+前端页面上传文件(flask三种上传文件方式)
- vue 移动端签字_Vue 移动端
- 68页PPT,读懂中、美、德三国智能制造战略!
- Bit-Z转入GXS、PPS、SPHTX、EOS未到账解决方案
- Intellij Idea的使用之svn篇
- matlab仿真二元等幅边射阵,MATLAB仿真天线阵代码.doc
- iOS开发多线程篇—NSOperation基本操作
- 解决在servlet中输出html的中文输出为问号的问题
- 如何利用百度音乐播放器的API接口来获取高音质歌曲
- Python实现四个经典小游戏合集
- 用计算机改手机电量,三分钟更换iPhone 6虚标电池,老手机又焕发青春了
- crio电压采集 labview_LabVIEW与cRIO入门.pdf
- awgn信道matlab,AWGN信道下数字通信系统的蒙特卡洛仿真(基于matlab).doc
- SQL Server数据库应用与开发教程各章习题参考答案
- 9大代理服务器软件的比较与分析
- 6月30日 区块链新闻
- python如何下载安装spacy_Python spaCy
- [Vuforia]二.3D物体识别
- matlab 稀疏随机矩阵,Matlab 稀疏矩阵函数
- 「 OFFICE 」将Excel的sheet拆分成独立文件的方法