+++++++++++++++++++++++++++++++++++++++++++
标题: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. Promise探讨

    一.前言 大家都知道JavaScript一大特点就是单线程,为了不阻塞主线程,有些耗时操作(比如ajax)必须放在任务队列中异步执行.传统的异步编程解决方案之一回调,很容易产生臭名昭著的回调地狱问题. ...

  2. VS2017 无法连接到Web服务器“IIS Express”终极解决方案

    今天日了gou了,一大早打开VS2017的时候出现无法连接到Web服务器"IIS Express"的错误,然后必应了一下,再谷歌了一下找到的解决方法也都千篇一律,奈何都没能解决,最 ...

  3. 通过数据分析告诉你北京Python开发的现状

    相信各位同学多多少少在拉钩上投过简历,今天突然想了解一下北京Python开发的薪资水平.招聘要求.福利待遇以及公司地理位置.既然要分析那必然是现有数据样本.本文通过爬虫和数据分析为大家展示一下北京Py ...

  4. sql servse 查询当前库内表索引值

    PERCENT --a.id, THEN c.name ELSE '' END AS 表名, THEN a.name ELSE '' END AS 索引名称, d.name AS 列名, b.keyn ...

  5. .net core +codefirst(.net core 基础入门,适合这方面的小白阅读,本文使用mysql或mssql)

    设置为model所在的那一层 前言 .net core mvc和 .net mvc开发很相似,比如 视图-模型-控制器结构.所以.net mvc开发员很容易入手.net core mvc .但是两个又 ...

  6. java的设计模式 - 静态工厂方法

    静态工厂方法,也不知道为何叫这个名字.其实也就是一个静态函数,可以替代构造函数用.大名鼎鼎的 guava 就大量使用这种模式,这是非常有用的模式. 比如是 Integer i = Integer.va ...

  7. 微信小程序 canvas 文字居中

    drawCanvas: function(ctx) { //... // 昵称 ctx.setFontSize(16) //字体大小 ctx.setFillStyle('#fff') //字体颜色 c ...

  8. 一、Snapman多人协作电子表格之——Snapman自我介绍

    一.Snapman系统介绍 Snapman是一个真正现代化的电子表格系统:QQ是即时通讯软件,那Snapman就是一个即时工作系统. 微软CEO纳德拉说:Excel才是微软最伟大的产品,Excel将所 ...

  9. node配置微信小程序解密消息以及推送消息

    上一篇文章介绍过 微信小程序配置消息推送,没有看过的可以先去查看一下,这里就直接去把那个客服消息接口去解密那个消息了. 在这里我选择的还是json格式的加密. 也就是给小程序客服消息发送的消息都会被微 ...

  10. java的设计模式 - 外观模式(Facade)

    目的 看脸模式目的很简单,就是给用户留个好印象,不想让用户关注系统中的具体细节,关注系统的外表(暴露出来的接口)就好了.一些 GUI 的菜单也好,SDK 也好或多或少也会用到这种思想.这更多的是一种思 ...