+++++++++++++++++++++++++++++++++++++++++++
标题: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. asp.net core导入excel

    接昨天的导出 导入excel内容 对比昨天导出的内容增加了一行实体属性名称作为标题行,这样到转换为实体的时候才能找到对应的属性. 导入代码 public IActionResult InportExc ...

  2. Activity、Fragment、Dialog基类简单整理

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 这里简单记录下Activity.Fragment.Dialog基类中的常规写法,后续根据项目需求进行相应的扩展. BaseActiv ...

  3. springboot~WebTestClient的使用

    在使用springboot进行开发时,单元测试是必要的,当你建立一个spring项目时,它会为我们自己生成一个测试项目,当你的项目开始过程中,测试用例是同时要进行的,我们在进行WEB层的集成测试时,可 ...

  4. [开发技巧]·Numpy广播机制的深入理解与应用

    [开发技巧]·Numpy广播机制的深入理解与应用 1.问题描述 我们在使用Numpy进行数据的处理时,经常会用到广播机制来简化操作,例如在所有元素都加上一个数,或者在某些纬度上作相同的操作.广播机制很 ...

  5. SmartSql Zookeeper分布式配置

    安装 SmartSql.ZooKeeperConfig Install-Package SmartSql.ZooKeeperConfig Demo string connStr = "192 ...

  6. Reactive Extensions 相见恨晚的Rx.Net

    何为Reactive Extensions(Rx) Rx是一个遵循函数式编程的类库,它引用观察者以及迭代器设计模式对可观察对象产生的数据进行异步消费.使用Rx, 开发人员将使用LINQ运算符操作异步数 ...

  7. 基于“formData批量上传的多种实现” 的多图片预览、上传的多种实现

    前言 图片上传是web项目常见的需求,我基于之前的博客的代码(请戳:formData批量上传的多种实现)里的第三种方法实现多图片的预览.上传,并且支持三种方式添加图片到上传列表:选择图片.复制粘贴图片 ...

  8. Eureka配置instanceId显示IP

    直接配置: eureka: client: serviceUrl: defaultZone: http://localhost:8761/eureka/ instance: prefer-ip-add ...

  9. C# 连接/查询Jira

    查询jira数据,如果是前端,可以按照如下格式直接访问,获取数据 http://jira.company.com/rest/api/2/search?jql=project = REM AND res ...

  10. 【转】Redis一般会遇到的问题以及解析

    单线程的 Redis 为什么这么快 这个问题是对 Redis 内部机制的一个考察.根据我的面试经验,很多人都不知道Redis 是单线程工作模型.所以,这个问题还是应该要复习一下的. 回答主要是以下三点 ...