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 ...
随机推荐
- sqlserver数据库备份时出现3241问题
工作中需要将生产上的数据库备份到测试数据库一份,然后同步生产环境进行测试.但是在将数据库还原的过程中,遇到了下面的问题: 说是,介质簇结构不正确,猜测应该是sqlserver的版本不一致的问题,然后查 ...
- Java~关于开发工具和包包
大叔也学java了,距离上学时接触的java已经有10多年了,看着确实有些陌生了,不过还是希望学学,感受一下这个当今最牛X的语言!开发工具IDE对于一个语言来说是很必要的,就是Csharp使用vs一样 ...
- @vue-cli3创建项目报错:ERROR command failed: npm install --loglevel error --registry=https://registry.npm.taobao.org --di
使用@vue-cli3时 在你感觉所以配置都搞好开始创建项目时,不停的报错,就是创建不成功 清npm缓存也不行 改淘宝镜像也不行 就快奔溃了,最后最终(其实我在凑150字,为了能发到首页给更多采坑的兄 ...
- The openssl extension is required for SSL/TLS protection but is not available
今天使用composer update发现报错:The openssl extension is required for SSL/TLS protection but is not availabl ...
- Ubuntu16.04安装RealSense SR300驱动
原文链接 https://blog.csdn.net/u013401766/article/details/78472285 第一步:CMake 3.14.0 安装 1)下载cmake-3.14.1. ...
- Django学习之七:Django 中间件
目录 Django 中间件 自定义中间件 - - - 大体两种方式 将中间件移除 实例 中间件加载源码阅读 总结 Django 中间件 Tips: 更新日志: 2019.01.31 更新django中 ...
- 吐血bug-- 多个input框接连blur事件导致alert接连弹出
本来今天想记录一下Flow在vue源码中的应用,结果临时触发了个bug... bug描述: elementUi + Vue 技术 需求:一个表格中有至少两条数据,每条数据都有input框,在失去焦点后 ...
- align-content 与 align-items 区别
align-content 和 align-items : 1:共同点:它们对齐方向为交叉轴 2:不同点:align-content 应用于为 多行 而 align-items:应用于单行. 单 ...
- 数据结构java(一)数组链表
链表是数据结构中最基础的内容,链表在存储结构上分成两种:数组形式储存,链式存储. 相比c语言需要的结构体,在java中由于有了面向对象编程,将指针‘藏’了起来,不需要分配内存. 所以只需要创建一个对象 ...
- 怎樣添加設置GridView,CheckBox全選功能
GridView內CheckBox控件全選設置 不需要添加後台代碼操作,前端即可完成設置,如下: 前端代碼: 1.設置javascript. <html xmlns="http://w ...