高性能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 ...
随机推荐
- du
du -ah --max-depth=1 这个是我想要的结果 a表示显示目录下所有的文件和文件夹(不含子目录),h表示以人类能看懂的方式,max-depth表示目录的深度.
- 十分钟带你读懂《增长黑客》zz
背景 “If you are not growing, then you are dying. ”(如果企业不在增长,那么就是在衰亡!) 这句话适用于企业,也适用于个人.人生毕竟不像企业,是非成败,似 ...
- Win7 VS2017编译Blender2.79
去年在VS2013环境编译过一次,重装系统后换了VS2017,正好刚编译完Godot3.0.2,顺手把Blender也编译了吧. 官方Windows下编译指南 https://wiki.blender ...
- 现网环境业务不影响,但是tomcat启动一直有error日志,ERROR org.apache.catalina.startup.ContextConfig- Unable to process Jar entry [module-info.class] from Jar [jar:file:/home/iufs/apache-tomcat/webapps/iufs/WEB-INF/lib/asm
完整的错误日志信息: 2019-03-19 15:30:42,021 [main] INFO org.apache.catalina.core.StandardEngine- Starting Ser ...
- OpenAL音频库例程
Windows下C++可用的OpenAL demo. 基于alut工具库的OpenAL例程,涵盖了基本的OpenAL指令,对部分作出了注释,并且可以播放(当然得把对应的音频文件放到正确的路径下). # ...
- 对list遍历删除符合的数据
例子
- javaean(web作业)
javabean简介: javabean是java语言开发的可重用组件,在jsp中使用javabean可以减少代码的重复量,使代码简洁. 他的优点: 1.可将HTML和Java代码分离,这主要是为了日 ...
- intentservice 内部类
https://blog.csdn.net/u010746364/article/details/50503586
- XML学习总结一
1.声明 <?xml version="1.0" encoding="gb2312"?> version属性指定该文档遵守的版本号,通常为1.0X ...
- 报错:Maximum call stack size exceeded
最后通过查看一篇别人的博客,通过对照,发现我把参数值写反了,把参数a的值写成了参数b的值.详情可以看如下博客: https://www.cnblogs.com/dunitian/p/5865725.h ...