mysql执行计划查看_查看Mysql执行计划

1、MySQL语法

MySql提供了EXPLAIN语法用来进行查询分析,在SQL语句前加一个”EXPLAIN”即可。

默认情况下Mysql的profiling是关闭的,所以首先必须打开profiling

set profiling="ON"

mysql> show variables like "%profi%";

+------------------------+-------+

| Variable_name | Value |

+------------------------+-------+

| profiling | ON |

show processlist; 查看现在在运行的所有进程列表,在进程列表中我们唯一需要的是ID

mysql> show processlist;

+----+------+----------------+-----------+---------+------+-------+-------------

-----+

SHOW PROFILES Syntax:

SHOW PROFILE [type [, type] ... ]

[FOR QUERY n]

[LIMIT row_count [OFFSET offset]]

type:

ALL

| BLOCK IO

| CONTEXT SWITCHES

| CPU

| IPC

| MEMORY

| PAGE FAULTS

| SOURCE

| SWAPS

2、Navicat工具

打开profile分析工具:

i

查看是否生效:show variable like ‘%profil%’;

查看进程:show processlist;

选择数据库:use db_jiakao;

全部分析的类型:show PROFILE all;

查看表索引:show index from user_member;##查看表索引

使用explain命令查看query语句的性能:

EXPLAIN select * from user_feedback;##查看执行计划中的sql性能

第一个查询是全表扫描,第二个是索引扫描:

区别在于type:all是全表扫描 index 通过索引扫描

或者在查询中输入需要查看执行计划的语句,点击执行,然后点击解释。选择解释标签,就可以查看到sql的执行计划了

解释

1、ID、table

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

id相同时,执行顺序由上至下

如果是子查询,id的序号会递增,id值越大优先级越高,越先被执行

3.id如果相同,可以认为是一组,从上往下顺序执行;在所有组中,id值越大,优先级越高,越先执行

table:显示这一行的数据是关于哪张表的

2、type

显示连接使用了何种类型,对表所使用的访问方式。从最好到最差的连接类型为const、eq_reg、ref、range、indexhe和ALL

说明:不同连接类型的解释(按照效率高低的顺序排序)system:系统表,表中只有一行数据。这是const连接类型的特殊情况。

const :读常量,且最多只会有一条记录匹配。表中的一个记录的最大值能够匹配这个查询(索引可以是主键或惟一索引)。因为只有一行,这个值实际就是常数,因为MYSQL先读这个值然后把它当做常数来对待。

eq_ref:最多只会有一条匹配结果,一般是通过主键或者唯一键索引来访问;在连接中,MYSQL在查询时,从前面的表中,对每一个记录的联合都从表中读取一个记录,它在查询使用了索引为主键或惟一键的全部时使用。

ref:Join 语句中被驱动表索引引用查询,这个连接类型只有在查询使用了不是惟一或主键的键或者是这些类型的部分(比如,利用最左边前缀)时发生。对于之前的表的每一个行联合,全部记录都将从表中读出。这个类型严重依赖于根据索引匹配的记录多少—越少越好。

range:索引范围扫描,这个连接类型使用索引返回一个范围中的行,比如使用>或

查找东西时发生的情况。>

refornull:与ref 的唯一区别就是在使用索引引用查询之外再增加一个空值的查询。

unique_subquery:子查询中的返回结果字段组合是主键或者唯一约束

index_merge:查询中同时使用两个(或更多)索引,然后对索引结果进行merge 之后再读取表数据;

index_subquery:子查询中的返回结果字段组合是一个索引(或索引组合),但不是一个主键或者唯一索引;

index:全索引扫描,这个连接类型对前面的表中的每一个记录联合进行完全扫描(比ALL更好,因为索引一般小于表数据)。

ALL:全表扫描,这个连接类型对于前面的每一个记录联合进行完全扫描,这一般比较糟糕,应该尽量避免。

3、possiblekeys 、keylen

possible_keys显示可能应用在这张表中的索引。这里的索引名字是创建索引时指定的索引昵称;如果索引没有昵称,则默认显示的是索引中第一个列的名字。如果为空,没有可能的索引,可以为相关的域从WHERE语句中选择一个合适的语句

key_len表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度(keylen显示的值为索引字段的最大可能长度,并非实际使用长度,即keylen是根据表定义计算而得,不是通过表内检索出的)不损失精确性的情况下,长度越短越好

4、key

实际使用的索引。如果为NULL,则没有使用索引。很少的情况下,MYSQL会选择优化不足的索引。这种情况下,可以在SELECT语句中使用USE INDEX(indexname)来强制使用一个索引或者用IGNORE INDEX(indexname)来强制MYSQL忽略索引key_len使用的索引的长度。在不损失精确性的情况下,长度越短越好

5、ref

显示的是列的名字,显示索引的哪一列被使用了,MySQL将根据这些列来选择行,如果可能的话,是一个常数 。“对于每一种与另一个表中记录的组合,MySQL将从当前的表读取所有带有匹配索引值的记录。如果连接操作只使用键的最左前缀,或者如果键不是 UNIQUE或PRIMARY KEY类型(换句话说,如果连接操作不能根据键值选择出唯一行),则MySQL使用ref连接类型。如果连接操作所用的键只匹配少量的记录,则ref是一 种好的连接类型。”

6、rows

MYSQL认为必须检查的用来返回请求数据的行数 ,这里最理想的数字就是1。

7、select_type

所使用的查询类型,判断是否是复杂语句,主要有以下这几种查询类型

DEPENDENT SUBQUERY:子查询中内层的第一个SELECT,依赖于外部查询的结果集;DEPENDENT UNION:子查询中的UNION,且为UNION 中从第二个SELECT 开始的后面所有SELECT,同样依赖于外部查询的结果集;PRIMARY:子查询中的最外层查询,注意并不是主键查询;SIMPLE:除子查询或者UNION 之外的其他查询;SUBQUERY:子查询内层查询的第一个SELECT,结果不依赖于外部查询结果集;UNCACHEABLE SUBQUERY:结果集无法缓存的子查询;UNION:UNION 语句中第二个SELECT 开始的后面所有SELECT,第一个SELECT 为PRIMARYUNION RESULT:UNION 中的合并结果;DERIVED:派生表的SELECT, FROM子句的子查询

8、Extra

关于MYSQL如何解析查询的额外信息。将在表4.3中讨论,但这里可以看到的坏的例子是Using temporary和Using filesort,意思MYSQL根本不能使用索引,结果是检索会很慢

说明:extra列返回的描述的意义

Distinct :一旦mysql找到了与行相联合匹配的行,就不再搜索了。

Not exists :mysql优化了LEFT JOIN,一旦它找到了匹配LEFT JOIN标准的行,就不再搜索了。

No tables:Query 语句中使用FROM DUAL 或者不包含任何FROM 子句;

Using filesort:当我们的Query 中包含ORDER BY 操作,而且无法利用索引完成排序操作的时候,MySQL Query Optimizer 不得不选择相应的排序算法来实现。看到这个的时候,查询就需要优化了。mysql需要进行额外的步骤来发现如何对返回的行排序。它根据连接类型以及存储排序键值和匹配条件的全部行的行指针来排序全部行。

Using index:所需要的数据只需要在Index 即可全部获得而不需要再到表中取数据。列数据是从仅仅使用了索引中的信息而没有读取实际的行动的表返回的,这发生在对表的全部的请求列都是同一个索引的部分的时候。

Using temporary :当MySQL 在某些操作中必须使用临时表的时候,在Extra 信息中就会出现Using temporary 。主要常见于GROUP BY 和ORDER BY 等操作中。看到这个的时候,查询需要优化了。这里,mysql需要创建一个临时表来存储结果,这通常发生在对不同的列集进行ORDER BY上,而不是GROUP BY上。

Using where:如果我们不是读取表的所有数据,或者不是仅仅通过索引就可以获取所有需要的数据,则会出现Using where 信息;

Where used:使用了WHERE从句来限制哪些行将与下一张表匹配或者是返回给用户。如果不想返回表中的全部行,并且连接类型ALL或index,这就会发生,或者是查询有问题。

Using index for group-by:数据访问和Using index 一样,所需数据只需要读取索引即可,而当Query 中使用了GROUP BY 或者DISTINCT 子句的时候,如果分组字段也在索引中,Extra 中的信息就会是Using index for group-by;

Using where with pushed condition:这是一个仅仅在NDBCluster 存储引擎中才会出现的信息,而且还需要通过打开Condition Pushdown 优化功能才可能会被使用。控制参数为engineconditionpushdown 。

Full scan on NULL key:子查询中的一种优化方式,主要在遇到无法通过索引访问null值的使用使用;

Impossible WHERE noticed after reading const tables:MySQL Query Optimizer 通过收集到的统计信息判断出不可能存在结果;

Select tables optimized away:当我们使用某些聚合函数来访问存在索引的某个字段的时候,MySQL Query Optimizer 会通过索引而直接一次定位到所需的数据行完成整个查询。当然,前提是在Query 中不能有GROUP BY 操作。如使用MIN()或者MAX()的时候;

Range checked for each Record(index map:#) :没有找到理想的索引,因此对从前面表中来的每一个行组合,mysql检查使用哪个索引,并用它来从表中返回行。这是使用索引的最慢的连接之一。

总结

• EXPLAIN不会告诉你关于触发器、存储过程的信息或用户自定义函数对查询的影响情况• EXPLAIN不考虑各种Cache• EXPLAIN不能显示MySQL在执行查询时所作的优化工作• 部分统计信息是估算的,并非精确值• EXPALIN只能解释SELECT操作,其他操作要重写为SELECT后查看执行计划。

因此,弄明白了explain语法返回的每一项结果,我们就能知道查询大致的运行时间了,如果查询里没有用到索引、或者需要扫描的行过多,那么可以感到明显的延迟。因此需要改变查询方式或者新建索引。mysql中的explain语法可以帮助我们改写查询,优化表的结构和索引的设置,从而最大地提高查询效率。当然,在大规模数据量时,索引的建立和维护的代价也是很高的,往往需要较长的时间和较大的空间,如果在不同的列组合上建立索引,空间的开销会更大。因此索引最好设置在需要经常查询的字段中

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

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

相关文章

计算机社团活动总结ppt,社团活动总结PPT

九月迎新生,大学社团活动再次活跃起来。为了做好今年的活动,有必要对去年的社团活动做下反思总结。下面是出国留学网小编为您整理提供的大学社团活动总结PPT模板及正文预览,欢迎查看。PPT正文预览:大学社团活动总结xxxx年对活动与…

myeclipse怎么创建jframe类_创建型-建造者模式

一个对象创建的时候,需要各种初始化化,有一套复杂的创建流程,如果这些流程散布在系统各个地方的话,会越来越难以维护,因此建造者模式就是把一套复杂的创建某个具体产品的流程,管理起来。定义:将…

mysql占用内存吗_mysql占多少内存

展开全部MySQL 自身内存规62616964757a686964616fe4b893e5b19e31333433646463划说到 MySQL 自身的内存规划,最先想到的就是 MySQL 中各种 buffer 的大小,innodb buffer pool 就是最鹤立鸡群的那个。innodb_buffer_pool_size 参数的大小究竟如何设置&…

计算机鼠标装有,计算机鼠标装有传感器来监视鼠标的移动情况,如图

利用欧姆定律进行计算:根据串、并联电路的特点和欧姆定律的公式可进行有关计算。解题的方法是:(1)根据题意画出电路图,看清电路的组成(串联还是并联);(2)明确题目给出的已知条件与未知条件,并在电路图上标明&#xff1…

docker portainer_「实战篇」开源项目docker化运维部署-Portainer管理集群部署(十)...

之前都是通过命令的方式,管理docker的,其实docker还是有图形界面的。使用图形界面如何管理docker,其实业界很多公司都对docker进行了图形化的封装。之前在初级和中级的时候也有界面marathon。这里说下业界比较出名的portainer。portainer官网…

php 执行mysql查询_php中执行mysql的常用操作

连接到mysql服务器:$conn mysql_connect($host,$user,$password) or die ("连接失败");mysql_query($conn);选择数据库:$usedbmysql_select_db("$db_name")or die ("连接失败");mysql_query($usedb);解决在mysql数据库中…

怎么快速搜索服务器里的文件,使用 Everything,快速搜索电脑文件,制作局域网资料搜索器 | 科技搜...

所需工具:Everything在 Windows 系统中,已经有自带的资源管理器文件查找功用,当然也有其他的一些软件辅佐查找,但是这些都不及一款软件,名字叫 Everything ,速度非常快,支持正则表达式&#xff…

python循环结构语句_python控制语句---循环结构语句

这次主要把循环结构的控制语句补上,主要包含while、for、continue、break、循环嵌套。主要写一些基本的认识以及包含的一些实例。当只有唯一路径且只跑一次的时候选择上一节中的选择结构语句就可以了,但是当执行一次或者重复循环执行时就需要另辟蹊径了&…

hive left outer join 子查询临时表_基于历史数据的用户访问次数,每天新老用户,日活,周活,月活的hive计算...

最近有一个需求,统计每天的新老用户,日活,周活,月活。 我们每天的增量数据会加入到hive历史数据表中,包含用户访问网站的一些信息,字段有很多,包括用户唯一标识guid。 当然了日活,周…

sql server2008r2 没有提示_SQL学习之旅(1)

从2020.07.28开始跟着猴子哥系统学习数据库,在此记录自己的sql学习与练习过程,希望能为以后的自己带来帮助。SQL简介练习1:1.如何验证mysql数据库安装成功?在完成环境变量的配置的情况(在Path中添加mysql的bin目录路径…

lptv自建服务器,如何搭建自己的IPTV平台

概述IPTV平台包括鉴权服务器、EPG服务器和媒体服务器。IPTV机顶盒首先与鉴权服务器进行通信,鉴权成功后获取EPG服务器和UserToken。EPG服务器实现节目内容导航、播放控制等用户界面。媒体服务器以RTSP协议实现流媒体传输。机顶盒与鉴权服务器和EPG服务器之间的通信都…

mysql事务prepare_mysql之 事务prepare 与 commit 阶段分析

打开binlog选项后,执行事务提交命令时,就会进入两阶段提交模式。两阶段提交分为prepare阶段和commit两个阶段。流程如下 :这里面涉及到两个重要的参数:innodb_flush_log_at_trx_commit和sync_binlog,参数可以设置不同的…

order by 子查询_【框架】118:mybatis之多表高级查询

今天是刘小爱自学Java的第118天。感谢你的观看,谢谢你。学习内容安排如下:补充说明知识点:resultMap,sql片段。mybatis中的高级查询,即多表关联查询。查询主要分为:一对一,一对多,多…

小程序使用css变量,小程序使用css变量实现“换肤”方案

使用sass,stylus可以很方便的使用变量来做样式设计,其实css也同样可以定义变量,在小程序中由于原生不支持动态css语法,so,可以使用css变量来使用开发工作变简单。基础用法page {--main-bg-color: brown;}.one {color: white;backg…

笔试MySQL读写速度优化_笔试题:优化mysql数据库的方法

优化mysql数据库的方法,(1).数据库设计方面,这是DBA和Architect的责任,设计结构良好的数据库,必要的时候,去正规化(英文是这个:denormalize,中文翻译成啥我不知道),允许部分数据冗余,避免JOIN操作,以提高查询效率(2).系统架构设计方面,表散列,把海量数据散列到几个不…

css找某个元素的下个子元素,CSS可以检测一个元素有多less个子元素?

注:这个解决scheme将返回一定长度的子集,而不是你所要求的父元素。 希望它仍然有用。安德烈路易斯提出了一个方法: http : //lea.verou.me/2011/01/styling-children-based-on-their-number-with-css3/不幸的是,它只适用于IE9及以…

python文本聚类分析_python机器学习kmeans算法——对文本进行聚类分析

#!/usr/bin/env python#-*- coding: utf-8 -*-#File : kmeans.py#Author: 田智凯#Date : 2020/3/19#Desc :机器学习kmeans算法,对科技成果项目进行聚类分析 from __future__ importprint_functionimporttimefrom sklearn.feature_extraction.text importTfidfVector…

lock字段mysql_MySQL的lock tables和unlock tables的用法(转载)

早就听说lock tables和unlock tables这两个命令,从字面也大体知道,前者的作用是锁定表,后者的作用是解除锁定。但是具体如何用,怎么用,不太清楚。今天详细研究了下,总算搞明白了2者的用法。lock tables 命令…

css中变形,css3中变形处理

transfrom功能在css3 中可以使用transfrom功能实现文字或图像的旋转,缩放,倾斜,移动等变形处理deg是css3中使用的一种角度单位。旋转: 使用rotate方法,在参数中加入角度值,在角度值后要加上角度单位deg。旋…

获取 子文件夹 后缀_后期制作老司机教你一键批量生成项目文件夹

我猜你的项目工程是这样的,当你老板说去修改一下之前几个月的工程的时候,你都不知道哪个工程才是最终版呀。乱糟糟的工程而且当你打开工程的时候,wo艹,素材怎么丢失了~~不管是后期制作者还是平常我们日常工作,一定要养…