高性能Mysql笔记 — explain
explain
查看sql的执行计划,只是一个近似结果,一般不会实际执行该sql,如果有子查询就会执行子查询
explain table_name,这儿的table_name含义较广:子查询、union结果
两个变种:
explain extended:可以查看将执行计划生成的sql语句,将要被废弃
explain partitions:显示查询将访问的分区
explain的局限:
- 不会告诉你触发器、存储过程和UDF对如何影响查询结果
- 不会告诉你mysql执行查询过程中做的特定优化
- 不会包含执行计划的所有信息
- 不区分相同名字的事物,例如:内存和排序和临时文件都使用"filesort",磁盘上和内存中的临时表都是用"Using tamporary"
- 可能会误导,例如:可能会对一个很小的limit查询显示全索引扫描
- 只能解释select查询(5.6以后允许解释非select语句),不会对存储过程调用、insert、update、delete或其他语句做解释,但是可以把这些语句使用select重写
id
select的编号,如果有子查询,则按照子查询在sql中出现的顺序编号,子查询一般包含:
- 一般子查询,子查询位于select字段位置
- 派生表,位于from 子句中的查询
- union查询
select_type
表示查询的类型
- simple,简单子查询,不包含子查询和union
- primary,包含union或者子查询,最外层的部分标记为primary
- subquery,一般子查询中的子查询被标记为subquery,也就是位于select列表中的查询
- derived,派生表——该临时表是从子查询派生出来的,位于form中的子查询
- union,位于union中第二个及其以后的子查询被标记为union,第一个就被标记为primary,如果是union位于from中则标记为derived
- union result,用来从匿名临时表里检索结果的select被标记为union result
subquery和union还可以被标记为dependent和uncacheable
table
对应行正在访问哪一个表,表名或者别名
- 关联优化器会为查询选择关联顺序,左侧深度优先
- 当from中有子查询的时候,表名是derivedN的形式,N指向子查询,也就是explain结果中的下一列
- 当有union result的时候,表名是union 1,2等的形式,1,2表示参与union的query id
type
访问类型,mysql如何查找表中的行
- all,逐行全表扫描,如果使用了limit,extra中显示Using distinct/not exists
- index,按照索引全表扫描,根据扫描结果随机访问行,开销较大,如果使用覆盖索引开小会小一点,这是extra显示using index
- range,范围扫描就是一个有限制的索引扫描,开始于索引的某一行,返回匹配这个值域的行,比如:between,where里面的>,in、or也显示为range,但是相差较大的类型
- ref,索引查找,返回匹配单个值的行,这个值是一个常数或者多表查询里前一个查询的结果
- eq_ref,最多只返回一条记录,例如:主键或者唯一值索引查找
- const,system,mysql将某一部分优化为一个常量,提高效率
- null,意味着mysql在优化阶段分解语句,在执行阶段不需要再访问表或者索引
possible_key
显示查询使用了哪些索引,表示该索引可以进行高效地查找,但是列出来的索引对于后续优化过程可能是没有用的
key
显示mysql决定采用哪一列来优化对该表的访问,表示该索引可以最小化查询成本
key_len
索引使用的字节数,可以估算出具体是哪些列
ref
显示key列中记录的索引查找值所用的列或者常量
rows
mysql估计所需要查找的行数
extra
显示的是不适合在其他列里面显示的信息
- using index,使用覆盖索引
- using where,mysql将在存储引擎检索后再进行过滤
- using temporary,使用临时表对查询结果进行排序
- using filesort,使用外部索引对结果进行排序,而不是按照索引从表里读取,不能说明使用哪一种排序,也不能说明是在磁盘上还是内存中排序
高性能Mysql笔记 — explain的更多相关文章
- 高性能MySQL笔记 第6章 查询性能优化
6.1 为什么查询速度会慢 查询的生命周期大致可按照顺序来看:从客户端,到服务器,然后在服务器上进行解析,生成执行计划,执行,并返回结果给客户端.其中“执行”可以认为是整个生命周期中最重要的阶段. ...
- 高性能MySQL笔记 第5章 创建高性能的索引
索引(index),在MySQL中也被叫做键(key),是存储引擎用于快速找到记录的一种数据结构.索引优化是对查询性能优化最有效的手段. 5.1 索引基础 索引的类型 索引是在存储引擎层而 ...
- 读高性能MySql笔记
1.1 MySQL逻辑架构 MySql服务器逻辑架构图 1.连接管理与安全性 每个客户端连接都会在服务器进程中拥有一个线程,这个连接的查询只会在这个单独的线程中执行,该线程只能轮流在某个CPU核心或者 ...
- 高性能Mysql笔记 — 索引
index优化 对于频繁作为查询条件的字段使用索引 注意索引字段类型的隐式转换,数据库类型和应用类型要一致 索引的种类 唯一索引,成为索引的列不能重复 单列索引,一个索引只包含一列 单列前缀索引,有些 ...
- 高性能MySQL笔记-第1章MySQL Architecture and History-001
1.MySQL架构图 2.事务的隔离性 事务的隔离性是specific rules for which changes are and aren’t visible inside and outsid ...
- 高性能Mysql笔记 — 优化
性能优化 了解查询的整个生命周期,清楚每个阶段的时间消耗情况 性能分析 慢查询日志--服务器性能分析 参考 慢查询日志是优化很重要的手段,但是开启慢查询日志对性能的影响并不大,所以可以考虑在线上打开慢 ...
- 高性能MySQL笔记-第5章Indexing for High Performance-004怎样用索引才高效
一.怎样用索引才高效 1.隔离索引列 MySQL generally can’t use indexes on columns unless the columns are isolated in t ...
- 高性能MySQL笔记 第4章 Schema与数据类型优化
4.1 选择优化的数据类型 通用原则 更小的通常更好 前提是要确保没有低估需要存储的值范围:因为它占用更少的磁盘.内存.CPU缓存,并且处理时需要的CPU周期也更少. 简单就好 简 ...
- 高性能MySQL笔记:第1章 MySQL架构
MySQL 最重要.最与众不同的特性是他的存储引擎架构,这种架构的设计将查询处理(Query Precessing)及其系统任务(Server Task)和数据的存储/提取相分离. 1.1 MyS ...
随机推荐
- Spring Boot不同版本整合Redis的配置
1. Spring Boot为1.4及其他低版本 1.1 POM.XML配置 <!--引入 spring-boot-starter-redis(1.4版本前)--> <depende ...
- 学习Acegi应用到实际项目中(12)- Run-As认证服务
有这样一些场合,系统用户必须以其他角色身份去操作某些资源.例如,用户A要访问资源B,而用户A拥有的角色为AUTH_USER,资源B访问的角色必须为AUTH_RUN_AS_DATE,那么此时就必须使用户 ...
- Web缓存和静态化
Web缓存和静态化 目录 Web缓存基础... 1 什么是Web缓存... 1 Web缓存的类型... 1 为何要使用Web缓存... 1 重验证... 1 更新... 2 浏览器缓存... 2 工作 ...
- react-eslintrc
{ "extends": ["eslint:recommended"], "plugins": [ "react" ], ...
- POI对Excel的操作
1. 先导包 commons-io-2.6.jar包,用于对文件的操作. 下载地址:http://commons.apache.org/proper/commons-io/download_io.cg ...
- win7里linux虚拟机安装vmware tools(ubuntu12.04)
安装Vmware Tools工具 1.安装linux虚拟机(略) 2.虚拟机去启动,选择虚拟机à设置,“硬件”中选择CD/DVD(IDE),右侧选择“使用ISO镜像文件(M)” -- 文件选择vmw ...
- 把dotx模板的样式应用到当前文档中(不应用dotx的其他东西)
Word.Document doc = this.Application.ActiveDocument; //模板样式添加到当前文档 doc.CopyStylesFromTemplate(@" ...
- Debian 8.x / Ubuntu 16.04.x 搭建 Ghost 教程
Ghost 是一款使用 Node.js 开发的博客系统,相对于使用 PHP 开发的 WordPress 更轻巧友好,所以本站已经从 WordPress 切换至 Ghost,本文介绍在 Debian 8 ...
- python 上传文件
上周产品给我提了个需求,大体是做一个后台系统,管理游戏比赛落地页的数据更新,难点在于需要给CDN上传文件.现在把经验记录下来,下次有类似的需求能提高开发效率. 我使用的是网宿CDN,没有用网宿的SDK ...
- html5 css选择器。 井号,句号的区别
.理解CSS的样式组成CSS里的样式表是有规则组成的,每条规则有三个部分组成:1.选择器(如下面例子中的:“body”),告诉浏览器文档的哪个部分受规则影响:2.属性(如实例中的font-family ...