+++++++++++++++++++++++++++++++++++++++++++
标题: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数据库执行计划(简单版)的更多相关文章

  1. MySql的执行计划

    一.什么是数据库执行计划: MySQL执行计划是sql语句经过查询优化器后,查询优化器会根据用户的sql语句所包含的字段和内容数量等统计信息,选择出一个执行效率最优(MySQL系统认为最优)的执行计划 ...

  2. MySQL性能分析, mysql explain执行计划详解

    MySQL性能分析 MySQL性能分析及explain用法的知识是本文我们主要要介绍的内容,接下来就让我们通过一些实际的例子来介绍这一过程,希望能够对您有所帮助. 1.使用explain语句去查看分析 ...

  3. Mysql查看执行计划-explain

    最近生产环境有一些查询较慢,需要优化,于是先进行业务确认查询条件是否可以优化,不行再进行sql优化,于是学习了下Mysql查看执行计划. 语法 explain <sql语句>  例如: e ...

  4. Mysql查看执行计划

    EXPLAIN(小写explain)显示了mysql如何使用索引来处理select语句以及连接表.可以帮助选择更好的索引和写出更优化的查询语句. EXPLAIN + sql语句可以查看mysql的执行 ...

  5. Mysql explain执行计划

    EXPLAIN(小写explain)显示了mysql如何使用索引来处理select语句以及连接表.可以帮助选择更好的索引和写出更优化的查询语句. EXPLAIN + sql语句可以查看mysql的执行 ...

  6. 全栈前端入门必看 koa2+mysql+vue+vant 构建简单版移动端博客

    koa2+mysql+vue+vant 构建简单版移动端博客 具体内容展示 开始正文 github地址 <br/> 觉得对你有帮助的话,可以star一下^_^必须安装:<br/> ...

  7. mysql数据库基础的简单操作指南

    最近在学习mysql,本文是做的关于mysql学习的笔记,跟大家分享一下,希望对大家学习mysql知识有所助益.mysql现在几乎已经成了网站建设的主流数据库,很多php网站系统都采用了mysql数据 ...

  8. 15、简述MySQL的执行计划?

    具体的Mysql的执行计划,请参考下面的链接: MySQL_执行计划详细说明

  9. 【夯实Mysql基础】mysql explain执行计划详解

    原文地址   1).id列数字越大越先执行,如果说数字一样大,那么就从上往下依次执行,id列为null的就表是这是一个结果集,不需要使用它来进行查询.   2).select_type列常见的有: A ...

随机推荐

  1. jenkins maven 自动远程发布到服务器,钉钉提醒团队

    jenkins 自动远程发布到服务器 1.安装jenkins 安装过程:自行百度 英文不好的,不要装最新版的jenkins.建议安装Jenkins ver. 2.138.4,此版本可以设置中文语言,设 ...

  2. 详解mybatis配置文件

    在前面两篇文章中,大致与大家分享了基于Java的ORM框架,Mybatis基本架构和Mybatis实现CRUD的基本原理与流程,在本篇文章中,继续与大家分享Mybatis配置文件. 通过研究Mybat ...

  3. 利用SHA-1算法和RSA秘钥进行签名验签(带注释)

    背景介绍 1.SHA 安全散列算法SHA (Secure Hash Algorithm)是美国国家标准和技术局发布的国家标准FIPS PUB 180-1,一般称为SHA-1.其对长度不超过264二进制 ...

  4. [Vue] vue2.0

    vue实例 所有的 Vue 组件都是 Vue 实例,并且接受相同的选项对象 当一个 Vue 实例被创建时,它将 data 对象中的所有的属性加入到 Vue 的响应式系统中.当这些属性的值发生改变时,视 ...

  5. Flutter map 妙用及 .. 使用

    前言 本篇文章对于熟悉 flutter 或者 dart 的小伙伴来说可能觉得比较简单,但是对于初学者或者没用过的小伙伴还是有些收获的. 背景 说到 map 妙用的发现,还要归功于 Tooltip 的研 ...

  6. 事件Event一

    事件(Event)例如:最近的视觉中国'黑洞事件'.我们大多数人(订阅者)是通过XX平台(发布者)得知的这一消息,然后订阅者A出售视觉中国的股票(触发的方法),订阅者B买入视觉中国的股票. using ...

  7. aspx中的checkbox 取值问题

    问题:前台checkbox控件,选中值为1,不选值为0: 解决方案: 插入一行 <input type="hidden" name="RemberPwd" ...

  8. MySQL 笔记整理(17) --如何正确地显示随机消息?

    笔记记录自林晓斌(丁奇)老师的<MySQL实战45讲> (本篇内图片均来自丁奇老师的讲解,如有侵权,请联系我删除) 17) --如何正确地显示随机消息? 如果有这么一个英语单词表,需要每次 ...

  9. Centos 7.6搭建Tomcat 环境,发布Java项目

    安装 JDK Tomcat 的安装依赖 JDK,在安装 Tomcat 之前需要先安装 Java JDK.输入命令 java -version,如果显示 JDK 版本,证明已经安装了 JDK java ...

  10. PhotoshopCS5中将单位修改成百分比

    PhotoshopCS5中单位默认是厘米或px,当用同一动作修改两张照片时,会因为片子大小不同,修改收到影响.若将单位修改成百分比,则动作会根据照片大小,自动进行调整. 1)选择菜单栏中的“编辑”选项 ...