MySQL数据库执行计划(简单版)
+++++++++++++++++++++++++++++++++++++++++++
标题:MySQL数据库执行计划简单版
时间:2019年2月25日
内容:MySQL数据库执行计划简单版
重点:MySQL数据库执行计划详解简单版
+++++++++++++++++++++++++++++++++++++++++++
1. 什么是执行计划
数据库对用户输入的SQL语句进行解析,通过优化器生成最优的执行路径,该路径被称为执行计划。
2. 为什么需要执行计划
便于数据库运维人员对低效率的查询语句进行性能分析,完成SQL优化,提升数据库服务的性能。
3. 执行计划信息
mysql> explain select * from emp where sal < (select avg(sal) from emp);
4. 执行计划信息详解
4.1 select_type字段
select_type字段为查询的类型,主要包括以下几种:
simple 简单查询,不涉及联合查询和子查询
primary 复杂查询的最外层的select查询
union 联合查询,第二个select语句或以后的select语句不依赖于外部查询的结果集
dependent union 联合查询,第二个select语句或以后的select语句依赖于外部查询的结果集
subquery 子查询中的第一个select查询,不依赖于外部查询结果集。
dependent subquery 子查询中的第一个select查询,依赖于外部查询结果集。
derived 出现递归子查询,将查询结果集存储在临时表中。
unacheable subquery 结果集不能被缓存的子查询,必须重新为外层查询的每一行进行评估
unacheable union 中的第二个或随后的 select 查询,属于不可缓存的子查询
union result 联合查询结果集,例如:select * from emp union select * from emp;首先需要获取两个select的结果集,再通过union进行合并生成结果。
友情提示:该部分尚在学习中,部分类型存在理解上的问题,因此没有做出详细解释。后期会会上传该部分的详细概述。
4.2 type字段
system:网上很多资料提到system类型是const类型的一种特殊情况,当查询的表仅有一行的情况下,会使用system类型。但是我已经写了很多相关SQL,全部没有实验成功,可能个人理解存在的问题。如果有人测试出该效果,希望能留下宝贵建议。
const:通过主键或者唯一键+not null 最为限定条件,返回结果有且仅有一行数据,此时优化器将该查询更改为常量。此时数据查询非常快。
eq_ref:唯一性索引扫描,每个索引建有且仅有一条记录与之匹配。
注意:以上三种类型存在一个共同条件就是限定返回结果有且仅有一条数据,这种情况在一般的线上业务中基本不会出现。因此这三种类类型作为了解。
ref:连接不能基于关键字选择并确认一条数据(可能存在多条数据符合该条件)。如果使用的键仅仅匹配少量行,该联接类型是不错的。
range:仅检索给定范围的行,范围性索引扫描。(当使用=、!=、<、>等等的范围的查询)
index:全表扫描,按照索引次序进行检索而不是根据行;避免了排序,但开销依旧很大。
all:全表扫描,逐行扫描,最坏的扫描情况。
注意:以上访问情况友好到坏排序为system > const > eq_ref > ref > range > index > all;一般来说,得保证查询至少达到range级别,最好能达到ref。
4.3 row字段
根据数据表统计信息和索引选用情况,从而估算出获取所需数据需要遍历的最大记录条数。
4.4 key字段
MySQL从possible_key中选择使用的索引。值为null,则表示没有使用索引。在少数情况下,MySQL会选择优化不足的索引,因此可以使用use index index_name强制使用索引或使用ignore index index_name忽略使用索引。
4.5 Extra字段
only index:仅通过索引进行信息检索。
using where:使用where限定条件,将匹配的数据返回给用户。
using filesoft:无法利用索引完成的排序操作为文件排序,可能会在内存或磁盘中进行排序。
using temporary:查询过程中需要使用临时表进行存储中间结果集,常用于排序和分组查询。
4.6 其他字段
possible_keys字段表示可能会使用的key值。
key_len字段表示keys长度。
id字段是选定的执行计划的序列号,表示执行的顺序。id的值越大,表示优先级越高,越先执行;id相同的情况下,则会按照顺序由上到下依次执行。
MySQL数据库执行计划(简单版)的更多相关文章
- MySql的执行计划
一.什么是数据库执行计划: MySQL执行计划是sql语句经过查询优化器后,查询优化器会根据用户的sql语句所包含的字段和内容数量等统计信息,选择出一个执行效率最优(MySQL系统认为最优)的执行计划 ...
- MySQL性能分析, mysql explain执行计划详解
MySQL性能分析 MySQL性能分析及explain用法的知识是本文我们主要要介绍的内容,接下来就让我们通过一些实际的例子来介绍这一过程,希望能够对您有所帮助. 1.使用explain语句去查看分析 ...
- Mysql查看执行计划-explain
最近生产环境有一些查询较慢,需要优化,于是先进行业务确认查询条件是否可以优化,不行再进行sql优化,于是学习了下Mysql查看执行计划. 语法 explain <sql语句> 例如: e ...
- Mysql查看执行计划
EXPLAIN(小写explain)显示了mysql如何使用索引来处理select语句以及连接表.可以帮助选择更好的索引和写出更优化的查询语句. EXPLAIN + sql语句可以查看mysql的执行 ...
- Mysql explain执行计划
EXPLAIN(小写explain)显示了mysql如何使用索引来处理select语句以及连接表.可以帮助选择更好的索引和写出更优化的查询语句. EXPLAIN + sql语句可以查看mysql的执行 ...
- 全栈前端入门必看 koa2+mysql+vue+vant 构建简单版移动端博客
koa2+mysql+vue+vant 构建简单版移动端博客 具体内容展示 开始正文 github地址 <br/> 觉得对你有帮助的话,可以star一下^_^必须安装:<br/> ...
- mysql数据库基础的简单操作指南
最近在学习mysql,本文是做的关于mysql学习的笔记,跟大家分享一下,希望对大家学习mysql知识有所助益.mysql现在几乎已经成了网站建设的主流数据库,很多php网站系统都采用了mysql数据 ...
- 15、简述MySQL的执行计划?
具体的Mysql的执行计划,请参考下面的链接: MySQL_执行计划详细说明
- 【夯实Mysql基础】mysql explain执行计划详解
原文地址 1).id列数字越大越先执行,如果说数字一样大,那么就从上往下依次执行,id列为null的就表是这是一个结果集,不需要使用它来进行查询. 2).select_type列常见的有: A ...
随机推荐
- Velocity 模板引擎的应用
springboot三层机构,还有数据映射待实体.肯定需要一套模板引擎呀.那不然还手写不成. 根据我们的实际业务需求,我添加了一套数据库反向生成实体类的模板,用的是Velocity 的引擎. 不多说直 ...
- PERL学习笔记---正则表达式的应用
使用m//匹配 //这是m//(模式匹配)的一种简写.同qw//操作一样,可以使用任何成对的分隔符.因此,可以使用m(fred), m<fred>, m{fred}, m[fred],或者 ...
- DotNetCore跨平台~聊聊中间件
回到目录 在进行.net core平台之后,我们如果希望在请求过程中添加一些事件是非常容易的,你可以把这些事件做成一个中间件Middleware,然后这些中间件就会以Http pipeline的管道方 ...
- 谈谈axios配置请求头content-type
现在前端开发中需要通过Ajax发送请求获取后端数据是很普遍的一件事情了,鉴于我平时在撸码中用的是vue技术栈,今天这里来谈谈我们常用的发Ajax请求的一个插件-axios. > 现在网上可能发送 ...
- 【我们一起写框架】MVVM的WPF框架(四)—DataGrid
前言 这个框架写到这里,应该有很多同学发现,框架很多地方的细节,其实是违背了MVVM的设计逻辑的. 没错,它的确是违背了. 但为什么明知道违背设计逻辑,还要这样编写框架呢? 那是因为,我们编写的是框架 ...
- AOP面向切面编程C#实例
原创: eleven 原文:https://mp.weixin.qq.com/s/8klfhCkagOxlF1R0qfZsgg [前言] AOP(Aspect-Oriented Programming ...
- Java 设置PDF文档背景色
一般生成的PDF文档默认的文档底色为白色,我们可以通过一定方法来更改文档的背景色,以达到文档美化以及保护双眼的作用. 以下内容提供了Java编程来设置PDF背景色的方法.包括: 设置纯色背景色 设置图 ...
- Eclipse设置全局用户名
-Duser.name=你的名字
- 008. 阻塞&非阻塞、同步&异步
阻塞 非阻塞:关注的对象是调用者: 阻塞:调用者发起调用后,处于等待状态,直到该调用有返回: 非阻塞:调用者发起调用后,不需要等待返回,可以往下执行: 同步 异步: 关注的对象是被调用者: 同步:服 ...
- Ext JS中的typeOf
Ext JS中的typeOf:以字符串格式,返回给定变量的类型 其中对字符串对象.元素节点.文本节点.空白文本节点判断并不准确 测试代码如下: <!DOCTYPE HTML PUBLIC &qu ...