25、sql分析命令explain和desc

 explain和desc命令的效果相同,命令格式如下:

mysql> explain SELECT s.id sid, s.name sname , t.id tid ,t.name tname FROM student s LEFT  JOIN teacher t ON  s.name = t.name;
+----+-------------+-------+-------+---------------+------+---------+------+------+----------------------------------------------------+
| id | select_type | table | type  | possible_keys | key  | key_len | ref  | rows | Extra                                              |
+----+-------------+-------+-------+---------------+------+---------+------+------+----------------------------------------------------+
|  1 | SIMPLE      | s     | index | NULL          | name | 768     | NULL |    3 | Using index                                        |
|  1 | SIMPLE      | t     | ALL   | NULL          | NULL | NULL    | NULL |   10 | Using where; Using join buffer (Block Nested Loop) |
+----+-------------+-------+-------+---------------+------+---------+------+------+----------------------------------------------------+
2 rows in setmysql> desc SELECT s.id sid, s.name sname , t.id tid ,t.name tname FROM student s LEFT  JOIN teacher t ON  s.name = t.name;
+----+-------------+-------+-------+---------------+------+---------+------+------+----------------------------------------------------+
| id | select_type | table | type  | possible_keys | key  | key_len | ref  | rows | Extra                                              |
+----+-------------+-------+-------+---------------+------+---------+------+------+----------------------------------------------------+
|  1 | SIMPLE      | s     | index | NULL          | name | 768     | NULL |    3 | Using index                                        |
|  1 | SIMPLE      | t     | ALL   | NULL          | NULL | NULL    | NULL |   10 | Using where; Using join buffer (Block Nested Loop) |
+----+-------------+-------+-------+---------------+------+---------+------+------+----------------------------------------------------+
2 rows in set
mysql> explain student;
+-------+--------------+------+-----+---------+----------------+
| Field | Type         | Null | Key | Default | Extra          |
+-------+--------------+------+-----+---------+----------------+
| id    | int(11)      | NO   | PRI | NULL    | auto_increment |
| name  | varchar(255) | YES  | MUL | NULL    |                |
| age   | int(11)      | YES  |     | NULL    |                |
+-------+--------------+------+-----+---------+----------------+
3 rows in setmysql> desc student;
+-------+--------------+------+-----+---------+----------------+
| Field | Type         | Null | Key | Default | Extra          |
+-------+--------------+------+-----+---------+----------------+
| id    | int(11)      | NO   | PRI | NULL    | auto_increment |
| name  | varchar(255) | YES  | MUL | NULL    |                |
| age   | int(11)      | YES  |     | NULL    |                |
+-------+--------------+------+-----+---------+----------------+
3 rows in set

 

用于数据表:

mysql> desc student;
+-------+--------------+------+-----+---------+----------------+
| Field | Type         | Null | Key | Default | Extra          |
+-------+--------------+------+-----+---------+----------------+
| id    | int(11)      | NO   | PRI | NULL    | auto_increment |
| name  | varchar(255) | YES  | MUL | NULL    |                |
| age   | int(11)      | YES  |     | NULL    |                |
+-------+--------------+------+-----+---------+----------------+Field:表中的字段名
Type:字段对应的类型
Null:可否为空
Key:键类型,主键、索引键。。。
Default:默认值
Extra:其他信息

用于sql:


mysql> explain SELECT s.id sid, s.name sname , t.id tid ,t.name tname FROM student s LEFT  JOIN teacher t ON  s.name = t.name;
+----+-------------+-------+-------+---------------+------+---------+------+------+----------------------------------------------------+
| id | select_type | table | type  | possible_keys | key  | key_len | ref  | rows | Extra                                              |
+----+-------------+-------+-------+---------------+------+---------+------+------+----------------------------------------------------+
|  1 | SIMPLE      | s     | index | NULL          | name | 768     | NULL |    3 | Using index                                        |
|  1 | SIMPLE      | t     | ALL   | NULL          | NULL | NULL    | NULL |   10 | Using where; Using join buffer (Block Nested Loop) |
+----+-------------+-------+-------+---------------+------+---------+------+------+----------------------------------------------------+id:查询的序列号select_type:查询的类型,普通查询、联合查询、子查询等table:输出行所引用的表名type:联合查询的访问类型,此属性比较重要possible_keys:表示能使用哪个索引在该表中找到行key:实际使用的索引键,如果没有索引被选择,键是NULLkey_len:实际使用的键长度ref:显示哪个字段或常数与key一起被使用进行查询rows:表示要遍历多少数据才能找到满足条件的数据,在innodb上是不准确的extra:附加信息

着重解释:

select_type字段:

SIMPLE简单查询,不适用UNION或子查询
PRIMARY最外层的SELECT
UNIONUNION中的第二个或后面的SELECT语句
DEPENDENT UNIONUNION中的第二个或后面的SELECT语句,取决于外面的查询
UNION RESULTUNION的结果
SUBQUERY子查询中的第一个SELECT
DEPENDENT SUBQUERY子查询中的第一个SELECT,取决于外面的查询
DERIVEDFROM子句的子查询

 

type字段:

SYSTEM表中只有一行记录
CONST表中最多只有一行匹配的记录,他在查询一开始就会被读取出来,被作为一个恒定值
EQ_REF表中会有一行记录被读取出来和以前一个表中读取出来的记录做联合,这是最好的连接类型,他用在索引所有字段都用于做连接并且这个索引是primary key或unique类型
REF表中所有符合检索值的记录都会被取出来和从上一个表中取出来的记录做联合,用于连接程序无法根据键值只取得一条记录的情况
REF_OR_NULL和REF类似,在检索的时候会搜索NULL值的记录,经常用于子查询
UNIQUE_SUBQUERY带in的子查询来代替ref
INDEX_SUBQUERY用子查询来代替in
RANGE只有在给定范围的记录才会被取出来,利用索引来取得一条记录,key字段表示使用了那个索引
INDEX只扫描所引树
ALL对表做全部扫描,应尽量避免

extra字段:

DISTINCT找到当前记录的匹配联合结果的第一条记录之后,不再搜索其他记录
NOT EXISTS做一个left join优化,在当前表中找到和前一条记录符合left join条件后,就不再搜索更多的记录
RANGE CHECKED FOR EACH RECORD (INDEX MAP:#)没有找到合适的可用的索引,取代的办法是:对于前一个表的每一个行连接,它会做一个校验以决定该使用那个索引,并且使用这个索引来从表中取得记录。
USING FILESORT需要额外做一遍排序操作,以拍好的顺序取得记录,应尽量避免
USING INDEX直接从索引树中的信息取得记录,不再去扫描实际的记录
USING TEMPORARY创建临时表存储结果以完成查询,通常发生在查询时包含了group by和order by子句,应尽量避免
USING WHEREwhere子句将用来限制哪些记录匹配了下一个表或者发送到客户端

可通过上述对表和sql分析来进行对应的修改,以使得性能达到最优

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

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

相关文章

P2290-[HNOI2004]树的计数【组合数,Prufer序列】

正题 题目大意:https://www.luogu.org/problem/P2290 题目大意 一棵树无根树第iii个点的度数为did_idi​,求树的数量。 解题思路 更具pruferpruferprufer序列的推论我们可以知道答案就是(n−2)!∏i1n(di−1)!\frac{(n-2)!}{\prod_{i1}^n(d_i-1)!}∏i1n​(di​−1…

动态规划训练9 [Brackets POJ - 2955 ]

Brackets POJ - 2955 再明显不过的区间DP的题目了,要求求出给出符号式中最大匹配的括号数。 考虑区间[l,r],如果str[l]与str[r]匹配了,那么转移方程为dp[l][r] max(dp[l][r],dp[l1][r-1] 2); 然后考虑将区间分成2部分 dp[l][r] max(dp[l…

.net core2.0下Ioc容器Autofac使用

Autofac基本使用Autofac是一款轻量级的IOC框架,使用率上还是挺高的,官方网站http://autofac.org,源码下载地址https://github.com/autofac/Autofac。下面以狗的列子来介绍autofac,nuget搜索Autofac进行安装public interface IDog{…

java实现下载时进度条提示

1、实现原理 计算出已经处理的数据记录数与所有需要导出的数据记录数的比例,根据每一个登陆用户的不同将比例存入缓存中,前台设计一个定时器,每隔一段时间去缓存中获取比例,然后根据比例来展示一下下载的进度。 2、具体代码实现 …

动态规划训练10 [Coloring Brackets CodeForces - 149D]

西安交大 软件53 蔡少斐 整理Coloring Brackets CodeForces - 149D 题目大意: 给定合法的括号序列,让你给括弧上色,并且上色时一定要满足3个要求: (1)每个括号要么被上红色,要么被上蓝色&…

微软重组变两大事业部:Windows主管离职

微软CEO纳德拉通过内部邮件宣布,整个公司进行重大重组,划分为两个新的事业部(部门),同时Windows业务主管Terry Myerson(特里梅尔森)将离开微软。Terry Myerson最为人诟病的就是推倒了Windows Mobile而打造全新的Windows Phone,结果…

jzoj3846-七天使的通讯【二分图判定】

正题 题目链接:https://jzoj.net/senior/#main/show/3846 题目大意 长度nnn的直线,mmm条线,将它们分成两边,使同一边不交叉,求是否有方案。 解题思路 将会交叉的直线之间连接边,然后判断是否是二分图即可。 codecod…

41、java应用占用cpu过高原因分析

线上服务器cpu占用过高问题排查 1、定位最耗cpu的进程 命令:top 2、定位最耗cpu的线程 命令:Top –Hp PID 例如:Top –Hp 12086 3、打印线程堆栈信息 命令:Printf ‘%x\n’ PID 例如:printf ‘%x\n’ 12118 先将…

动态规划训练11 [String painter HDU - 2476]

String painter HDU - 2476 题意: 我认为这是一道比较难的问题,自己想了很久,没有想出来怎么做,可能是因为思维僵化吧,一直在想怎么直接的由A变到B,事实上,可以有中间桥梁连接A和B,…

Google Optimization Tools介绍

Google Optimization Tools(OR-Tools)是一款专门快速而便携地解决组合优化问题的套件。它包含了:约束编程求解器。简单而统一的接口,用于多种线性规划和混合整数规划求解,包括 CBC、CLP、GLOP、GLPK、Gurobi、CPLEX 和SCIP。图算法 (最短路径…

11、mysql数据表中数据的查询(3)

说一下子查询,子查询的意义就是使用一个查询语句做为另一个查询语句的条件,一般使用exists和in来引导子查询 exists子查询 exists 放在 where 之后使用,可以看成查询数据所满足的一个条件,只是这个条件的值比较特殊(…

jzoj3847-都市环游【矩阵乘法】

正题 题目链接:https://jzoj.net/senior/#main/show/3847 题目大意 nnn个点mmm条边,第iii个点要求hih_ihi​时才可以到达。求经过ttt时从点1到点nnn的方案数。 解题思路 因为hih_ihi​较小,设zi,kz_{i,k}zi,k​表示iii时到kkk的方案数,转移…

使用.Net Core与Google Optimization Tools实现员工排班计划Scheduling

上一篇说完《Google Optimization Tools介绍》,让大家初步了解了Google Optimization Tools是一款约束求解(CP)的高效套件。那么我们用.Net Core与Google Optimization Tools来实现一个有关员工排班计划的场景感受一下。众所周知,…

动态规划训练12 [G - You Are the One HDU - 4283 ]

2012天津区域赛的一道题目,题目链接如下 You Are the One HDU - 4283 这道题目要说思想的话其实并不是很难,但是我却没做出来。关键就在于读题读不懂(How Vegetable I am!),到最后搜了别人的题解才明白这道…

42、Java服务内存OOM原因分析

1、出现问题的可能原因 对于应用来说内存分配太少 对象创建太多,又没有释放,造成内存泄漏严重,导致内存耗尽 申请太多的系统资源,系统资源耗尽。例如:不断创建线程,不断发起网络连接 2、如何定位问题&a…

jzoj3850-Fibonacci进制【斐波那契倍增】

正题 题目大意:https://jzoj.net/senior/#main/show/3850 题目大意 定义f(i)f(i)f(i)表示第i1i1i1个斐波那契数 一个数转换成斐波那契进制后第iii位的0/10/10/1表示是否需要加上f(i)f(i)f(i),然后将1∼∞1\sim \infty1∼∞转换成斐波那契进制后依次输出在屏幕上&a…

Slickflow.NET 开源工作流引擎基础介绍-.NET Core2.0 版本实现介绍

前言:.NET Core 是.NET Framework的新一代版本,是微软开发的第一个跨平台 (Windows、Mac OSX、Linux) 的应用程序开发框架(Application Framework),未来也将会支持 FreeBSD 与 Alpine 平台。.Net Core也是微软在一开始…

动态规划训练13 [Catch That Cow poj3278]

Catch That Cow POJ - 3278 这道题我看大家用的方法都是bfs搜索&#xff0c;为什么在我看来这就是一个动态规划的题目啊啊啊啊啊啊啊 dp[x]表示从N出发到x所需要的最小时间 那么得到如下转移方程 如果x < N的话&#xff0c;那么只能通过走路来转移&#xff0c;所以dp[x] …

jzoj1246-挑剔的美食家【set,贪心】

正题 题目大意:https://jzoj.net/senior/#main/show/1246 题目大意 nnn头牛&#xff0c;第iii头吃的东西价格大于aia_iai​&#xff0c;鲜嫩度大于bib_ibi​。mmm个吃的&#xff0c;第iii个价格为cic_ici​&#xff0c;鲜嫩度为did_idi​。 求满足所有奶牛的情况下最少要花多少…

DotNetty 跨平台的网络通信库

久以来,.Net开发人员都非常羡慕Java有Netty这样&#xff0c;高效&#xff0c;稳定又易用的网络通信基础框架。终于微软的Azure团队&#xff0c;使用C#实现的Netty的版本发布。不但使用了C#和.Net平台的技术特点&#xff0c;并且保留了Netty原来绝大部分的编程接口。让我们在使用…