高性能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 ...
随机推荐
- 把excel每一行中的数据输出为一个txt文档的VBA函数
excel vba代码: Sub makeTxt() For i = 1 To 1088'从第1行到1088行(最后一行) On Error Resume Next'出现错误时继续运行脚本 Open ...
- Python开发——16.HTML
一.HTML 1.服务端 import socket def main(): sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM) sock. ...
- 《笔记篇》非JS方法跳转到一个新页面,主要防止客户端禁止浏览器JS以后的跳转异常
用非JS方法打开一个新页面,主要防止客户端禁止浏览器JS以后的跳转失效 <meta http-equiv="refresh" content="0; url=htt ...
- STM32CubeMX的串口配置,以及驱动代码
1.STM32CubeMX的配置没啥子好说的,使能然后改一下波特率和字长,然后在将中断勾选,把中断等级调到1(一定要比systick的优先级垃圾!!!) 2.驱动代码 在生成的it.c文件中,例如用的 ...
- 内存栅栏(memory barrier):解救peterson算法的应用陷阱
最近一个项目中用到了peterson算法来做临界区的保护,简简单单的十几行代码,就能实现两个线程对临界区的无锁访问,确实很精炼.但是在这不是来分析peterson算法的,在实际应用中发现peterso ...
- Spring Boot中使用Spring Security进行安全控制转载来自翟永超
我们在编写Web应用时,经常需要对页面做一些安全控制,比如:对于没有访问权限的用户需要转到登录表单页面.要实现访问控制的方法多种多样,可以通过Aop.拦截器实现,也可以通过框架实现(比如:Apache ...
- linux根目录介绍
1. /bin binary二进制 存放系统许多可执行程序文件 执行的相关指令,例如ls pwd whoami,后台的支持文件目录 2. /sbin super binary超级的二进制 存放系统许多 ...
- c++实现简单的客户端和服务端
server.cpp #include<WinScok.h> #include<windows.h> #include<stdio.h> int main() { ...
- ubuntu下file_get_contents返回空字符串
ubuntu下file_get_contents返回空字符串 | 浏览:302 | 更新:2014-03-30 10:11 本文起初面临的问题是PHP中SoapClient不好使,最后file_get ...
- 目标检测算法(2)SPP-net
本文是使用深度学习进行目标检测系列的第二篇,主要介绍SPP-net:Spatial Pyramid Pooling in Deep ConvolutionalNetworks for Visual R ...