当前位置:网站首页>MySQL-Explain详解
MySQL-Explain详解
2022-07-31 05:08:00 【过的很好谢谢】
Explain介绍
在select语句之前增加explain关键字,执行后MySQL就会返回执行计划的信息,而不是执行sql。但如果from中包含子查询,MySQL仍会执行该子查询,并把子查询的结果放入临时表中。
Explain中的列
① id列
id列的编号是select的序列号,有几个select就有几个id,并且id是按照select出现的顺序增长的,id列的值越大优先级越高,id相同则是按照执行计划列从上往下执行,id为空则是最后执行。
② select_type列
表示对应行是简单查询还是复杂查询。
1)simple:不包含子查询和union的简单查询
2)primary:复杂查询中最外层的select
3)subquery:包含在select中的子查询(不在from的子句中)
用如下图展示primary和subquery类型
4)derived:包含在from子句中的子查询。mysql会将查询结果放入一个临时表中,此临时表也叫衍生表。
5)union:在union中的第二个和随后的select,UNION RESULT为合并的结果
③ table列
表示当前行访问的是哪张表。当from中有子查询时,table列的格式为,表示当前查询依赖id=N行的查询,所以先执行id=N行的查询,如上面select_type列图4所示。当有union查询时,UNION RESULT的table列的值为<union1,2>,1和2表示参与union的行id。
④ partitions列
查询将匹配记录的分区。 对于非分区表,该值为 NULL。
⑤type列
此列表示关联类型或访问类型。也就是MySQL决定如何查找表中的行。依次从最优到最差分别为:system > const > eq_ref > ref > range > index > all。
NULL:MySQL能在优化阶段分解查询语句,在执行阶段不用再去访问表或者索引。
system、const:MySQL对查询的某部分进行优化并把其转化成一个常量(可以通过show warnings命令查看结果)。system是const的一个特例,表示表里只有一条元组匹配时为system。
eq_ref:主键或唯一键索引被连接使用,最多只会返回一条符合条件的记录。简单的select查询不会出现这种type。
ref:相比eq_ref,不使用唯一索引,而是使用普通索引或者唯一索引的部分前缀,索引和某个值比较,会找到多个符合条件的行。 range:通常出现在范围查询中,比如in、between、大于、小于等。使用索引来检索给定范围的行。
index:扫描全索引拿到结果,一般是扫描某个二级索引,二级索引一般比较少,所以通常比ALL快一点。
ALL:全表扫描,扫描聚簇索引的所有叶子节点。
⑥possible_keys列
此列显示在查询中可能用到的索引。如果该列为NULL,则表示没有相关索引,可以通过检查where子句看是否可以添加一个适当的索引来提高性能。
⑦ key列
此列显示MySQL在查询时实际用到的索引。在执行计划中可能出现possible_keys列有值,而key列为null,这种情况可能是表中数据不多,MySQL认为索引对当前查询帮助不大而选择了全表查询。如果想强制MySQL使用或忽视possible_keys列中的索引,在查询时可使用force index、ignore index。
⑧ key_len列
此列显示MySQL在索引里使用的字节数,通过此列可以算出具体使用了索引中的那些列。索引最大长度为768字节,当长度过大时,MySQL会做一个类似最左前缀处理,将前半部分字符提取出做索引。当字段可以为null时,还需要1个字节去记录。
key_len计算规则:
字符串:
char(n):n个数字或者字母占n个字节,汉字占3n个字节
varchar(n):n个数字或者字母占n个字节,汉字占3n+2个字节。+2字节用来存储字符串长度。
数字类型:
tinyint:1字节 smallint:2字节 int:4字节 bigint:8字节
时间类型
date:3字节 timestamp:4字节 datetime:8字节
⑨ ref列
此列显示key列记录的索引中,表查找值时使用到的列或常量。常见的有const、字段名
⑩ rows列
此列是MySQL在查询中估计要读取的行数。注意这里不是结果集的行数。
Extra列
此列是一些额外信息。常见的重要值如下:
1)Using index:使用覆盖索引(如果select后面查询的字段都可以从这个索引的树中获取,不需要通过辅助索引树找到主键,再通过主键去主键索引树里获取其它字段值,这种情况一般可以说是用到了覆盖索引)。
2)Using where:使用 where 语句来处理结果,并且查询的列未被索引覆盖。
3)Using index condition:查询的列不完全被索引覆盖,where条件中是一个查询的范围。
4)Using temporary:MySQL需要创建一张临时表来处理查询。出现这种情况一般是要进行优化的。
5)Using filesort:将使用外部排序而不是索引排序,数据较小时从内存排序,否则需要在磁盘完成排序。
6)Select tables optimized away:使用某些聚合函数(比如 max、min)来访问存在索引的某个字段时。
先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦
边栏推荐
- MySQL forgot password
- View source and switch mirrors in two ways: npm and nrm
- Information System Project Manager Core Test Site (55) Configuration Manager (CMO) Work
- XSS shooting range (3) prompt to win
- 【ORACLE Explain 详解】
- MySQL transaction (transaction) (this is enough..)
- 1. 获取数据-requests.get()
- Apache DButils使用注意事项--with modifiers “public“
- On Governance and Innovation | 2022 OpenAtom Global Open Source Summit OpenAnolis sub-forum was successfully held
- MySQL优化之慢日志查询
猜你喜欢
Three oj questions on leetcode
MySQL事务隔离级别详解
Industry-university-research application to build an open source talent ecosystem | 2022 Open Atom Global Open Source Summit Education Sub-Forum was successfully held
TOGAF之架构标准规范(一)
【C语言】操作符详解
Apache DButils使用注意事项--with modifiers “public“
On Governance and Innovation | 2022 OpenAtom Global Open Source Summit OpenAnolis sub-forum was successfully held
Error EPERM operation not permitted, mkdir 'Dsoftwarenodejsnode_cache_cacach Two solutions
centos7安装mysql5.7步骤(图解版)
Interview | Cheng Li, CTO of Alibaba: Cloud + open source together form a credible foundation for the digital world
随机推荐
Centos7 install mysql5.7 steps (graphical version)
Numpy中np.meshgrid的简单用法示例
The input input box displays the precision of two decimal places
Gaussian distribution and its maximum likelihood estimation
信息系统项目管理师核心考点(五十五)配置管理员(CMO)的工作
C Implementation of Simple Network File Copy
Apache DButils使用注意事项--with modifiers “public“
CentOS7 —— yum安装mysql
DVWA靶场环境搭建
CentOS7 安装MySQL 图文详细教程
【R语言】【3】apply,tapply,lapply,sapply,mapply与par函数相关参数
Go中间件
Lua,ILRuntime, HybridCLR(wolong)/huatuo热更新对比分析
mysql stored procedure
Blockbuster | foundation for platinum, gold, silver gave nameboards donors
一文了解大厂的DDD领域驱动设计
Temporal对比Cadence
【debug锦集】Expected input batch_size (1) to match target batch_size (0)
打造基于ILRuntime热更新的组件化开发
ABC D - Distinct Trio (Number of k-tuples