php explain type等级,mysql中explain分析sql详解

Explain举例mysql> explain select * from event;

+—-+————-+——-+——+—————+——+———+——+——+——-+

| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |

+—-+————-+——-+——+—————+——+———+——+——+——-+

| 1 | SIMPLE | event | ALL | NULL | NULL | NULL | NULL | 13 | |

+—-+————-+——-+——+—————+——+———+——+——+——-+

1 row in set (0.00 sec)

各个属性的含义

id

Query Optimizer 所选定的执行计划中查询的序列号

select_type

select查询的类型,主要是区别普通查询和联合查询、子查询之类的复杂查询。

各项内容含义说明:

A:simple:表示不需要union操作或者不包含子查询的简单select查询。有连接查询时,外层的查询为simple,且只有一个。

B:primary:一个需要union操作或者含有子查询的select,位于最外层的单位查询的select_type即为primary。且只有一个。

C:union:union连接的select查询,除了第一个表外,第二个及以后的表select_type都是union。

D:dependent union:与union一样,出现在union 或union all语句中,但是这个查询要受到外部查询的影响

E:union result:包含union的结果集,在union和union all语句中,因为它不需要参与查询,所以id字段为null

F:subquery:除了from字句中包含的子查询外,其他地方出现的子查询都可能是subquery

G:dependent subquery:与dependent union类似,表示这个subquery的查询要受到外部表查询的影响

H:derived:from字句中出现的子查询。

I:materialized:被物化的子查询

J:UNCACHEABLE SUBQUERY:对于外层的主表,子查询不可被物化,每次都需要计算(耗时操作)

K:UNCACHEABLE UNION:UNION操作中,内层的不可被物化的子查询(类似于UNCACHEABLE SUBQUERY)

table

输出的行所引用的表。

type

联合查询所使用的类型。

type显示的是访问类型,是较为重要的一个指标,结果值从好到坏依次是:

system

> const > eq_ref > ref > fulltext > ref_or_null >

index_merge > unique_subquery > index_subquery > range >

index > ALL

一般来说,得保证查询至少达到range级别,最好能达到ref。除了all之外,其他的type都可以使用到索引,除了index_merge之外,其他的type只可以用到一个索引

A:system:表中只有一行数据或者是空表,且只能用于myisam和memory表。如果是Innodb引擎表,type列在这个情况通常都是all或者index

B:const:使用唯一索引或者主键,返回记录一定是1行记录的等值where条件时,通常type是const。其他数据库也叫做唯一索引扫描

C:eq_ref:出现在要连接过个表的查询计划中,驱动表只返回一行数据,且这行数据是第二个表的主键或者唯一索引,且必须为not null,唯一索引和主键是多列时,只有所有的列都用作比较时才会出现eq_ref

D:ref:不像eq_ref那样要求连接顺序,也没有主键和唯一索引的要求,只要使用相等条件检索时就可能出现,常见与辅助索引的等值查找。或者多列主键、唯一索引中,使用第一个列之外的列作为等值查找也会出现,总之,返回数据不唯一的等值查找就可能出现。

E:fulltext:全文索引检索,要注意,全文索引的优先级很高,若全文索引和普通索引同时存在时,mysql不管代价,优先选择使用全文索引

F:ref_or_null:与ref方法类似,只是增加了null值的比较。实际用的不多。

例如:

SELECT * FROM ref_table

WHERE key_column=expr OR key_column IS NULL;

G:index_merge:表示查询使用了两个以上的索引,最后取交集或者并集,常见and ,or的条件使用了不同的索引,官方排序这个在ref_or_null之后,但是实际上由于要读取所个索引,性能可能大部分时间都不如range

H:unique_subquery:用于where中的in形式子查询,子查询返回不重复值唯一值

I:index_subquery:用于in形式子查询使用到了辅助索引或者in常数列表,子查询可能返回重复值,可以使用索引将子查询去重。

J:range:索引范围扫描,常见于使用 =, <>, >, >=, , BETWEEN, IN()或者like等运算符的查询中。

K:index:索引全表扫描,把索引从头到尾扫一遍,常见于使用索引列就可以处理不需要读取数据文件的查询、可以使用索引排序或者分组的查询。

possible_keys

指出MySQL能使用哪个索引在该表中找到行。

key

显示MySQL实际决定使用的键。如果没有索引被选择,键是NULL。

key_len

显示MySQL决定使用的键长度。如果键是NULL,长度就是NULL。文档提示特别注意这个值可以得出一个多重主键里mysql实际使用了哪一部分。

ref

显示哪个字段或常数与key一起被使用。

rows

这个数表示mysql要遍历多少数据才能找到,在innodb上是不准确的。

Extra

如果你想要优化你的查询,那就要注意extra辅助信息中的using filesort和using temporary,这两项非常消耗性能,需要注意。

这个列可以显示的信息非常多,有几十种,常用的有:

distinct:在select部分使用了distinc关键字,当 mysql 找到了第一条匹配的结果后,将停止该值的查询而转为后面其他值的查询

no tables used:不带from字句的查询或者From dual查询。

使用not in()形式子查询或not exists运算符的连接查询,这种叫做反连接。即,一般连接查询是先查询内表,再查询外表,反连接就是先查询外表,再查询内表。

using filesort:排序时无法使用到索引时,就会出现这个。常见于order by和group by语句中。

using index:查询时不需要回表查询,直接通过索引就可以获取查询的数据,使用覆盖索引的时候就会出现

using

index condition: 在MySQL 5.6版本后加入的新特性ICP(Index Condition Pushdown);会先条件过滤索引,过滤完索引后找到所有符合索引条件的数据行,随后用 WHERE 子句中的其他条件去过滤这些数据行。

using where:表示MySQL服务器在存储引擎收到记录后进行“后过滤”(Post-filter),如果查询未能使用索引,Using where的作用只是提醒我们MySQL将用where子句来过滤结果集。这个一般发生在MySQL服务器,而不是存储引擎层。一般发生在不能走索引扫描的情况下或者走索引扫描,但是有些查询条件不在索引当中的情况下。

using join buffer(block nested loop),using join buffer(batched key accss):5.6.x之后的版本优化关联查询的BNL,BKA特性。主要是减少内表的循环数量以及比较顺序地扫描查询。

using sort_union,using_union,using intersect,using sort_intersection:

using intersect:表示使用and的各个索引的条件时,该信息表示是从处理结果获取交集。

using union:表示使用or连接各个使用索引的条件时,该信息表示从处理结果获取并集。

using sort_union和using sort_intersection:与前面两个对应的类似,只是他们是出现在用and和or查询信息量大时,先查询主键,然后进行排序合并后,才能读取记录并返回。

using temporary:表示使用了临时表存储中间结果。临时表可以是内存临时表和磁盘临时表,执行计划中看不出来,需要查看status变量,used_tmp_table,used_tmp_disk_table才能看出来。

firstmatch(tb_name):5.6.x开始引入的优化子查询的新特性之一,常见于where字句含有in()类型的子查询。如果内表的数据量比较大,就可能出现这个

loosescan(m..n):5.6.x之后引入的优化子查询的新特性之一,在in()类型的子查询中,子查询返回的可能有重复记录时,就可能出现这个。

版权声明:本文由PHP面试资料网发布,如需转载请注明出处。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/277381.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

es6中的块级作用域

块级作用域 凡是带{}都是块级作用域&#xff0c;if(){} for(){} 对象{} 1.在块级作用域下&#xff0c;var 和function跟在window下一样&#xff0c; function有个特殊的一点&#xff0c;在块级作用域下会提前声明&#xff0c;不会提前定义 2.在块级作用域下 let和const声明的变…

Windows10安装Ubuntu子系统+docker教程说明

说明 微软和Ubuntu深入合作推出了基于win桌面运行Ubuntu系统.为了满足开发同学也在win下也可以使用ubuntu的开发环境.通过利用win上的Linux子系统Ubuntu16.04能否安装docker并正常使用 复制代码 首先在安装Ubuntu应用之前&#xff0c;我们要做一些事情&#xff0c;避免安装和使…

【HDU - 2612】Find a way(bfs)

-->Find a way 直接上Chinese Descriptions: hsj和lsh最近迷上了pokemon go的游戏。在双十一大物期中考试来临之前&#xff0c;他们想抓一只稀有土拨鼠来攒攒人品&#xff08;因为土拨鼠的刷新地点最近来到了哈工程&#xff09;但是由于土拨鼠过于强大&#xff0c;他的雷霆半…

getMeasuredWidth和getWidth的区别

View的getWidth()和getMeasuredWidth()有什么区别吗&#xff1f; View的高宽是由View本身和Parent容器共同决定的。getMeasuredWidth()和getWidth()分别对应于视图绘制的measure和layout阶段。getMeasuredWidth()获取的是View原始的大小&#xff0c;也就是这个View在XML文件中配…

php图片地址参数错误,图片上传时一直显示请求地址错误怎么办

1、出现“请求地址错误”的直接原因&#xff1a;图中$action null2.根本原因&#xff1a;url美化那一节课程&#xff0c;去掉 index.php的.htaccess 文件修改的时候&#xff0c;没有按照老师的来写&#xff0c;所以美化url以后获取不到地址栏参数&#xff0c;导致$action值为n…

C#写的WebServices可运行于树莓派

阅读目录 Raspkate - 基于.NET的可运行于树莓派的轻量型Web服务器Raspkate项目演示回到目录Raspkate - 基于.NET的可运行于树莓派的轻量型Web服务器 最近在业余时间玩玩树莓派&#xff0c;刚开始的时候在树莓派里写一些基于wiringPi库的C语言程序来控制树莓派的GPIO引脚&#x…

[导入]Ms XmlDom 异步装载Xml文件

Ms XmlDom 异步装载Xml文件文章来源:http://blog.csdn.net/net_lover/archive/2004/07/07/36015.aspx 转载于:https://www.cnblogs.com/zhaoxiaoyang2/archive/2004/07/07/816151.html

Django的View(视图)

Django的View&#xff08;视图&#xff09; 一个视图函数&#xff08;类&#xff09;&#xff0c;简称视图&#xff0c;是一个简单的Python 函数&#xff08;类&#xff09;&#xff0c;它接受Web请求并且返回Web响应。 响应可以是一张网页的HTML内容&#xff0c;一个重定向&am…

高质量的期货研究报告去哪里找?

作者&#xff1a;虎虎的小尾巴链接&#xff1a;https://www.zhihu.com/question/25331621/answer/205439281来源&#xff1a;知乎著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。这是个好问题&#xff0c;我曾经或者直到现在我也一直在追求高…

oracle中偏移,怎么对相同的坐标点偏移?

上面说的第三步必须保证每个点不能重复分配&#xff0c;有些难度&#xff0c;还是用过程代码吧。CREATE TABLE t_offset asselect 1 id,1.001 x,1.002 y, 10 mark from dualunion allselect 2011 id,1.001 x,1.012 y, 31 mark from dualunion allselect 3…

设计模式之--原型模式

1.原型模式定义 原型模式非常简单&#xff0c;定义如下&#xff1a; 用原型实例指定创建对象的种类&#xff0c;并且通过拷贝这些原型创建新的对象 2.通用类图 原型模式的核心是实现Cloneable接口&#xff0c;此接口为JDK提供的一个标识接口&#xff0c;只有实现了此接口的类才…

搜索目录里所有文件(包括子目录)

搜索目录里所有文件(包括子目录&#xff09; 资料来源&#xff1a;http://www.cnblogs.com/jjwwww/archive/2004/09/04/39559.aspx 用到两个函数ParseDirectory 和CreatePathListvoidParseDirectory(stringpath, stringfilter) { strin…

一张图理解buffer与cache

转载于:https://blog.51cto.com/11193863/2169166

oracle服务器不识别tc服务,记一次ORACLE无法启动登陆事故

打开XSHELL 登陆ORACLE用户1.sqlplus scott/scott 提示登陆失败2.sqplus / as sysdba 启动数据库提示3.查找日志操作日志&#xff1a;$ORACLE_HOME/startup.log启动日志&#xff1a;$ORACLE_BASE/diag/rdbms/ora11g/ora11g/trace/alert_ora11g.log (ora11g为SID值)启动日志如果…

重构(Refactoring)技巧读书笔记 之二

重构&#xff08;Refactoring&#xff09;技巧读书笔记 之二<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />General Refactoring Tips, Part 2本文继续《重构&#xff08;Refactoring&#xff09;技巧读书笔记 之一》&#xff…

史上最全的Angular.js 的学习资源

Angular.js 的一些学习资源 基础 官方&#xff1a; http://docs.angularjs.org angularjs官方网站已被墙&#xff0c;可看 http://www.ngnice.com/&#xff1b;官方zip下载包 http://best.factj.com/dolymood/angular-packages&#xff0c;已增加docs服务&#xff0c;输入地址即…

BMP位图之8位位图(三)

起始结构 typedef struct tagBITMAPFILEHEADER { WORD bfType; //类型名&#xff0c;字符串“BM”&#xff0c; DWORD bfSize; //文件大小 WORD bfReserved1; //保留字 WORD bfReserved2; //保留字 DWORD bfOffBits; //实际位图数据的偏移字节数&#xff0c;即前三个部分长度之…

DNN 汉化中的问题????

今天看到了一份已经汉化过的DNN但是比较奇怪&#xff0c;当第一次运行后我所指定的新数据库中并没有添加新的内容&#xff0c;但是网站上的确是已经汉化过了的&#xff0c;不知道它把汉化的内容放到了哪里&#xff1f;&#xff1f;&#xff1f; 另外他所汉化界面的地方&#x…

php 打印对象详细信息,php打印显示数组与对象的函数详解

php打印显示数组与对象的函数详解发布于 2014-11-17 18:55:49 | 699 次阅读 | 评论: 0 | 来源: 网友投递PHP开源脚本语言PHP(外文名: Hypertext Preprocessor&#xff0c;中文名&#xff1a;“超文本预处理器”)是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点&…

ios开发-调用系统自带手势

在 iPhone 或 iPad 的开发中&#xff0c;除了用 touchesBegan / touchesMoved / touchesEnded 这组方法来控制使用者的手指触控外&#xff0c;也可以用 UIGestureRecognizer 的衍生类別来进行判断。用 UIGestureRecognizer 的好处在于有现成的手势&#xff0c;开发者不用自己计…