在mysql中,执行计划是数据库提供给用户的一套对sql语句进行解析、分析、优化功能的工具。执行计划的作用有:1、展示表的读取顺序;2、数据读取操作的类型;3、展示哪些索引是可以使用的;4、展示哪些索引是实际上使用的;5、展示表之间的引用关系;6、展示每张表被查询的行数。

本教程操作环境:windows7系统、mysql8版本、Dell G3电脑。
在数据库查询的时候,我们通常会使用sql语句去查询自己所需要的数据。但是,关于sql在数据库中是如何执行的,它有没有使用索引,具体使用了哪些索引,查找了哪些字段和表,他们的顺序是怎样的,分别用时多少等等信息我们不得而知,那么有没有什么方法可以看到这些信息,mysql给我们提供了一套工具——执行计划。
执行计划是数据库提供给我们的一套对sql语句进行解析、分析、优化功能的工具,他具有以下的作用:
展示表的读取顺序;
数据读取操作的类型;
哪些索引是可以使用的;
哪些索引是实际上使用的;
表之间的引用关系;
每张表被查询的行数。
注意:执行计划只是数据库针对sql给出最佳的优化参考方案,并不一定是最优解,即不要过度相信执行计划
使用执行计划很简单,在要执行的sql前面加上关键词explain即可。

从图中可以看出,sql执行计划主要包含以下信息:id、select_type、table、partitions、type、possible_keys、key、key_len、ref、rows、filtered、Extra。
3.1、id
select查询序列号,id相同,执行顺序由上至下;id不同,id值越大优先级越高,越先被执行;
3.2、select_type
select_type:表示select语句的类型,可以有以下取值;
SIMPLE:表示简单查询,其中不包含连接查询和⼦查询;
PRIMARY: 表示主查询,或者是最外⾯的查询语句;
UNION:表示连接查询的第2个或后⾯的查询语句;
DEPENDENT UNION:UNION中的第⼆个或后⾯的SELECT语句,取决于外⾯的查询;
UNION RESULT: 连接查询的结果;
SUBQUERY:⼦查询中的第1个SELECT语句;
DEPENDENT SUBQUERY:⼦查询中的第1个SELECT语句,取决于外⾯的查询;
DERIVED:SELECT(FROM ⼦句的⼦查询)。
3.3、table
table:表示查询的表名,可以有以下几种情况:
显示表名,如果起了别名,则显示别名;
3.4、partitions
partitions:匹配的分区。
3.5、type
type:这⼀列表示表关联类型或访问类型,即数据库决定如何查找表中的⾏,查找数据⾏记录的⼤概范围。依次从最优到最差分别为:system > const > eq_ref > ref > range > index > all
system:表中只有一行记录,相当于系统表,这是const类型的特列,平时不会出现,可以忽略不计;
const:通过索引一次命中,匹配一行数据,所以很快,常⽤于PRIMARY KEY或者UNIQUE索引的查询,可理解为const是最优化的;
eq_ref:唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配,常用语主键或唯一索引扫描,这可能是在 const 之外最好的联接类型了;
一览妙笔
自媒体、编剧、营销人员写作工具
50
查看详情
ref:非唯一性索引扫描,返回匹配某个单独值的所有行,用于=、操作符带索引的列;
range:只检索给定范围的行,使用一个索引来选择行,一般用于between、、in等查询,这种范围查询要比index要好,因为他只需要扫描索引的一个点,结束于另外一个点;
index:需要遍历索引树;
all:即全表扫描,意味着数据库需要从头到尾去查找所需要的⾏。通常情况下这需要增加索引来进⾏优化了。
注意:在进行sql优化的时候至少要优化到range,推荐优化到ref,最好是const。
3.6、possible_keys
possible_keys:这⼀列显示查询可能使⽤哪些索引来查找。explain 时可能出现 possible_keys 有列,⽽ key 显示 NULL 的情况,这种情况是因为表中数据不多,数据库认为索引对此查询帮助不⼤,选择了全表查询。
如果该列是NULL,则没有相关的索引。在这种情况下,可以通过检查 where ⼦句看是否可以创造⼀个适当的索引来提⾼查询性能,然后⽤ explain 查看效果。
3.7、key
key:显示数据库实际决定使⽤的键(索引)。如果没有选择索引,key的值是NULL。可以强制使⽤索引或者忽略索引。
3.8、key_len
key_len:这⼀列显示了数据库在索引⾥使⽤的字节数,通过这个值可以算出具体使⽤了索引中的哪些列,数值计算如下:
字符串类型
char(n):n字节长度
varchar(n):2字节存储字符串长度,如果是utf-8,则长度 3n + 2
数值类型
tinyint:1字节
smallint:2字节
int:4字节
bigint:8字节
时间类型
date:3字节
timestamp:4字节
datetime:8字节
如果字段允许为 NULL,需要1字节记录是否为 NULL
注意:索引最⼤⻓度是768字节,当字符串过⻓时,数据库会做⼀个类似左前缀索引的处理,将前半部分的字符提取出来做索引。
3.9、ref
ref:这⼀列显示了在key列记录的索引中表查找值所⽤到的列或常量,常见的有:const(常量),func,null,字段名(例:film.id)
3.10、rows
rows:这⼀列是数据库估计要读取并扫描的⾏数,注意这个不是结果集⾥的⾏数,因此这个值越小越好。
3.11、filtered
filtered:返回结果的行数占读取行数的百分比,值越大越好。
3.12、Extra
extra:这一列显示的是额外的信息,即不包含在其他列的信息,具体值如下:
distinct:数据库发现第1个匹配⾏后,停⽌为当前的⾏组合搜索更多的⾏;
not exists:数据库能够对查询进⾏LEFT JOIN优化,发现1个匹配LEFT JOIN标准的⾏后,不再为前⾯的的⾏组合在该表内检查更多的⾏;
range checked for each record (index map: #):数据库没有发现好的可以使⽤的索引,但发现如果来⾃前⾯的表的列值已知,可能部分索引可以使⽤;
using filesort(重点):数据库会对结果使⽤⼀个外部索引排序,⽽不是按索引次序从表⾥读取⾏。此时mysql会根据联接类型浏览所有符合条件的记录,并保存排序关键字和⾏指针,然后排序关键字并按顺序检索⾏信息。这种情况下⼀般也是要考虑使⽤索引来优化的;
using index(重点):从只使⽤索引树中的信息⽽不需要进⼀步搜索读取实际的⾏来检索表中的列信息,即表示select使用了覆盖索引而不必去回表查询;
using temporary(重点):数据库需要创建⼀张临时表来处理查询,这种情况常见于order by和group by。出现这种情况⼀般是要进⾏优化的,⾸先是想到⽤索引来优化;
using where:数据库将在存储引擎检索⾏后再进⾏过滤。就是先读取整⾏数据,再按where 条件进⾏检查,符合就留下,不符合就丢弃;
using index condition:与Using where类似,查询的列不完全被索引覆盖,where条件中是⼀个前导列的范围;
using sort_union(...), Using union(...), Using intersect(...):这些函数说明如何为index_merge联接类型合并索引扫描;
using index for group-by:类似于访问表的Using index⽅式,Using index for group-by表示数据库发现了⼀个索引,可以⽤来查 询group by或distinct查询的所有列,⽽不要额外搜索硬盘访问实际的表;
null:查询的列未被索引覆盖,并且where筛选条件是索引的前导列,意味着⽤到了索引,但是部分字段未被索引覆盖,必须通过“回表”来实现,不是纯粹地⽤到了索引,也不是完全没⽤到索引,即使用了索引但需要回表操作,应该避免回表操作。
【相关推荐:mysql视频教程】
以上就是mysql中执行计划是什么的详细内容,更多请关注其它相关文章!
# 关键词
# 溧阳品牌网站建设优化
# 河北抖音网站建设业务
# 营销推广方案怎么策划好
# 行业营销和推广哪个好
# 最优
# 所需要
# 越大
# 越好
# 可以使用
# 给我们
# 行数
# 这种情况
# 镜像
# mysql
# 光触媒营销推广大纲
# 互联网推广工具与营销
# 艺人推广网站推荐大全
# 铜陵网站关键词排名优化
# 朝阳抖音seo报价
# 法律推广营销方案
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
优化推广96088 】
【
技术知识133117 】
【
IDC资讯59369 】
【
网络运营7196 】
【
IT资讯61894 】
相关推荐:
Lar*el 中高效执行多列更新:单次查询实现
悟空浏览器如何恢复关闭的标签页 悟空浏览器撤销关闭网页快捷键设置
《土豆雅思》修改密码方法
荣耀盒子应用管理技巧
空腹吃苹果好吗 苹果空腹摄入指南
Go语言中方法与接收器:指针和值类型的调用机制详解
PSD转AI文件的简单方法
抖音号升级企业号怎么改名字?升级企业号有哪些好处?
126邮箱申请入口官网_126邮箱注册免费登录2025
解决jQuery多计算器输入字段冲突的教程
J*aScript实现下拉菜单驱动的动态表格数据展示
抖音小程序怎么开通?小程序开通条件是什么?
Three.js中动态更换3D模型纹理的教程
谷歌浏览器官网地址整理_谷歌浏览器新版直连2026稳定访问
word表格如何按某一列内容进行排序_Word表格按列排序方法
如何在CSS中清除浮动解决背景颜色不包裹内容问题_clear after技巧
PyEZ 配置提交中 RpcTimeoutError 的健壮性处理策略
PHP页面重载后变量状态保持:实现用户档案连续浏览的教程
如何在mysql中设计餐饮点餐系统_mysql点餐系统项目实战
《梦想世界:长风问剑录》药师一图流分享
包子漫画官网链接官方地址 包子漫画在线观看官网首页入口
CSS绝对定位与溢出控制:实现背景元素局部显示不触发滚动条
12306APP选座怎么选充电位置_12306APP带充电插座座位选择方法与技巧
酷狗音乐多音轨设置教程
如何在 WordPress 前端实现内容提交:古腾堡编辑器的替代方案与实践
Google Drive API服务器端访问指南:服务账户认证详解
mysql如何回滚事务_mysql ROLLBACK事务回滚方法
高德地图怎么查看未来行程规划_高德地图未来行程规划查看方法
小红书如何引流到私信?引流到私信有用吗?
小米倒班助手添加日历提醒
抖音网页版官方链接 抖音网页版官网链接入口
Golang如何测试结构体方法_Golang reflect方法测试与调用技巧
优化Asyncio嵌套函数调度:使用生产者-消费者模式实现并发流处理
漫蛙manwa官网浏览入口_漫蛙漫画网页版访问链接
WPS长文档分栏排版不乱方法_WPS分栏+分节符报纸排版教程
《大学搜题酱》官网地址登录
QQ网页版官方账号登录入口 QQ网页版网页版入口快速导航
《合金装备4》有望推出重制版!制作人发话了
mysql通配符能用于日志查询吗_mysql通配符在系统日志查询中的实际使用方法
Google Cloud Functions 时区处理指南:理解与最佳实践
《战地6》反作弊已成功拦截240万次作弊 发售第一周98%比赛没有作弊
《深林》冬季章节图文攻略
PHP中实现JSON数据数组分页的教程
发布小红书怎么屏蔽粉丝?屏蔽粉丝能看到吗?
漫蛙官网(首页入口)_漫蛙漫画稳定访问教程分享
盲鳗善于分泌黏液猜猜主要用来做什么
windows10怎么更改下载路径_windows10默认存储位置修改教程
Python高效统计字典嵌套列表值在目标列表中的出现次数
J*aScript 数值去小数位处理:多种方法与实践
word邮件合并怎么插入个性化图片_Word邮件合并插入个性化图片方法
2022-11-11
运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。