mysql查询优化explain命令详解

转载自 mysql查询优化explain命令详解

mysql查询优化的方法有很多种,explain是工作当中用的比较多的一种检查方式。explain翻译即解释,就是看mysql语句的查询解释计划,从解释计划我们能很清楚的看到解释的语句有没有合理用到索引,扫描了多少行数,有没有触及全表扫描、用到临时表等影响慢查询的原因。


使用很简单,如

explain select * from user ...


执行后会出现解释计划的表格,意义可参考下面的参数,针对这些解释计划,我们可以作为相对应的优化。



id    mysql查询标识符,即序号。


select_type    查询类型

  • simple:即简单select 查询,不包含union及子查询;

  • primary:最外层的 select 查询;

  • union:表示此查询是 union 的第二或随后的查询;

  • dependent union:union 中的第二个或后面的查询语句, 取决于外面的查询;

  • union result:union的结果;

  • subquery:子查询中的第一个select;

  • dependent subquery:子查询中的第一个select,取决于外面的查询,即子查询依赖于外层查询的结果。


table    所有查询到的表。

         

type    联接类型,比较重要的项,从这一项可以看出是否高效的重要依据

性能从好到坏依次如下:

  • system:表中只有一条数据,这是一个特殊的const 类型;

  • const:针对主键或唯一索引的等值查询扫描,最多只返回一行数据,const 查询速度非常快,因为它仅仅读取一次即可;

  • eq_ref:此类型通常出现在多表的 join 查询,表示对于前表的每一个结果,都只能匹配到后表的一行结果,并且查询的比较操作通常是=, 查询效率较高;

  • ref:此类型通常出现在多表的 join 查询, 针对于非唯一或非主键索引, 或者是使用了 最左前缀 规则索引的查询;

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

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

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

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

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

  • range:表示使用索引范围查询,通过索引字段范围获取表中部分数据记录。这个类型通常出现在 =, <>, >, >=, <, <=, IS NULL, <=>, BETWEEN, IN操作中,此时输出的 ref 字段为 NULL并且key_len字段是此次查询中使用到的索引的最长的那个;

  • index:全表扫描,只是扫描表的时候按照索引次序进行而不是行。主要优点就是避免了排序,但是开销仍然非常大,这种情况时, Extra 字段会显示 Using index;

  • all:性能最差的情况,使用了全表扫描,系统必须避免出现这种情况。


possible_keys    可能用到的索引。

        

key    真正用到的索引。

         

key_len    使用了索引字节的长度。

         

ref  显示索引的哪一列被使用了。

         

rows    扫描了多少行数,也是性能评估的重要依据。

         

extra 额度信息,常见的有以下几种。  

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

  • Using filesort:使用了文件排序,性能非常慢,需要优化。

  • Using index:查询使用到了索引,列数据是从仅仅使用了索引中的信息而没有读取实际的行动的表返回的,这发生在对表的全部的请求列都是同一个索引的部分的时候。

  • Using temporary:使用了临时表排序,性能非常慢,需要优化。

  • Using where:表示使用了where进行查询,不是很重要。

  • ALL:这个连接类型对于前面的每一个记录联合进行完全扫描,这一般比较糟糕,需要优化。


具体的对执行计划解释可以参考msyql官网:

https://dev.mysql.com/doc/refman/5.7/en/explain-output.html


扩展

另外,mysql5.6增加了对insert/update/deleteexplain支持,用法一样。


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

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

相关文章

sftp工具都有哪些_学霸们都在用哪些科研工具?

这是 社科学术圈 推送的第1677篇文章学者论文哪里找&#xff1f;论文怎么写&#xff1f;会用到哪些工具&#xff1f;本期将带来有助于提高论文写作效率的一些资料&#xff0c;包括OA论文、思路整理、词典类、制图工具类、文献生成类等方面。OA论文平台1. PMC(Pubmed Cenral)Pub…

redis集群搭建报错-(error) CLUSTERDOWN The cluster is down

【README】 最近搭建一个redis集群&#xff0c;参考博文 &#xff08;https://www.cnblogs.com/mafly/p/redis_cluster.html&#xff09; 对集群配置后&#xff0c;master&#xff0c; slave 也启动起来&#xff0c;但无法插入数据&#xff1b; 【1】报错信息&#xff1b; [r…

常用加密算法解析

转载自 常用加密算法解析 今天介绍下工作当中常用的加密算法、分类、应用。 1、对称加密算法 所谓对称&#xff0c;就是采用这种加密方法的双方使用方式用同样的密钥进行加密和解密。密钥是控制加密及解密过程的指令。算法是一组规则&#xff0c;规定如何进行加密和解密。 分类…

双指针:88. 合并两个有序数组

题目链接 88. 合并两个有序数组 解题思路 一. 合并数组后排序&#xff0c;时间复杂度为O((nm)log(nm)) 代码&#xff1a; 快排详解 class Solution {public void merge(int[] nums1, int m, int[] nums2, int n) {for(int im,j0;i<mn;i,j){nums1[i] nums2[j];}quickSor…

bmp180气压传感器工作原理_陕西压力传感器的工作原理信息推荐

压力传感器的工作原理应用广泛的是压阻式压力传感器&#xff0c;它具有极低的价格和较高的精度以及较好的线性特性。下面我们主要介绍这类陕西压力传感器。在了解陕西压力传感器时&#xff0c;我们首先认识一下电阻应变片这种元件。电阻应变片是一种将被测件上的应变变化转换成…

转-rsa加密算法

转自 阮一峰&#xff1b; http://www.ruanyifeng.com/blog/2013/06/rsa_algorithm_part_one.html http://www.ruanyifeng.com/blog/2013/07/rsa_algorithm_part_two.html 一、一点历史 1976年以前&#xff0c;所有的加密方法都是同一种模式&#xff1a; &#xff08;1&#…

设计模式之单例模式实践

转载自 设计模式之单例模式实践概念单例模式即一个JVM内存中只存在一个类的对象实例分类1、懒汉式 类加载的时候就创建实例 2、饿汉式 使用的时候才创建实例当然还有其他的生成单例的方式&#xff0c;双重校验锁&#xff0c;枚举和静态内部类&#xff0c;文中会有介绍实践懒汉式…

win7精简_低配电脑的福音:这款小众系统10GB+极限精简+不卡顿,比Win7还快!

自win7停服后&#xff0c;不少用户私信老毛桃&#xff0c;问win10哪个版本的系统好用。这让我怎么回答呢&#xff0c;不同的使用要求安装的系统不一样&#xff0c;但总的来说&#xff0c;世界上没有最完美的系统&#xff0c;只有最适合自己的系统。也有不少用户在评论win10各种…

快慢指针:141. 环形链表(判断是否存在环路)

题目描述 给定一个链表&#xff0c;判断链表中是否有环 题目链接 141. 环形链表 解题思路 使用快慢指针&#xff08;Floyd判圈算法&#xff09;&#xff1a;从链表的头部设置两个指针&#xff0c;p1的步长为1&#xff0c; p2的步长为2&#xff0c;同时向前走&#xff0c;如…

redis集群信息分析-cluster info-cluster nodes

【README】 本文po出 redis集群的节点信息&#xff0c;槽信息&#xff0c;以及字段含义 【1】集群信息 192.168.163.203:6380> cluster info cluster_state:ok cluster_slots_assigned:16384 cluster_slots_ok:16384 cluster_slots_pfail:0 cluster_slots_fail:0 cluste…

彻底理解正向代理和反向代理

转载自 彻底理解正向代理和反向代理平时工作中我们会接触到各种代理&#xff0c;它到底是什么概念呢&#xff0c;又是什么工作原理&#xff0c;下面我们具体来分析一下。1、概念正向代理这个很好理解&#xff0c;比如说你现在要访问一个外国的社交网站www.facebook.com&#xf…

查看电脑重启日志_系统日志看硬盘故障图文教程,电脑日志查看磁盘硬盘坏道问题方法...

大家好&#xff0c;我是老盖&#xff0c;感谢观看本篇文章&#xff0c;本文做的也有视频&#xff0c;也可以看我发布的视频。今天和大家讲一下通过电脑的系统日志&#xff0c;判断硬盘是否有问题的一个方法&#xff0c;最近这几天我这个电脑偶尔会卡一下&#xff0c;有的时候还…

redis集群依赖ruby

【README】 redis集群依赖ruby&#xff0c;需安装ruby环境&#xff0c;ruby版本需高于2.2。在创建redis集群前&#xff0c;需要安装ruby &#xff0c;命令如下 yum install ruby yum install rubygems gem install redis 【1】什么是 rubygems 转自 https://www.jianshu.c…

Springboot配置通过URL访问图片(静态资源)

一、确保为web项目&#xff0c;创建WebConfig 实现WebMvcConfigurer &#xff08;推荐&#xff09;或 继承WebMvcConfigurationSupport 说明&#xff1a; SpringBoot2.0 配置WebMvc 需extends WebMvcConfigurationSupport或implements WebMvcConfigurerSpring Boot中只能有一…

区块链技术

转载自 区块链技术最近影响极大的“勒索”病毒袭转全球&#xff0c;造成数以万计的电脑中毒&#xff0c;主要是通过AES/RSA加密电脑办公文件&#xff0c;此种加密方式没有私钥无法解密&#xff0c;黑客提供了解密的方式&#xff0c;就是按黑客提供的交易方式“比特币”交易&…

Springboot实现文件上传,并防止同文件重复上传

目录主要流程编写接受文件上传的Controller编写文件操作结果类编写文件操作类知识总结参考主要流程 在配置文件中添加文件操作的配置&#xff0c;示例&#xff1a; storage:image:#保存位置save-path: D:\classdesign-photo\images\#允许上传的类型allow-type:- jpg- png编写…

asp 执行 exe_EXE程序加密锁下载-EXE程序加密锁电脑版下载v5.0

exe是Windows电脑上常见的程序运行文件格式&#xff0c;EXE程序加密锁能够将该种类型的文件进行加密&#xff0c;帮助用户控制某个软件的使用权限&#xff0c;它的体积可以忽略不计&#xff0c;操作方法也很简单。软件特色EXE程序加密锁是一个功能强大的exe程序锁&#xff0c;能…

dubbo服务调试管理实用命令

转载自 dubbo服务调试管理实用命令 公司如果分项目组开发的&#xff0c;各个项目组调用各项目组的接口&#xff0c;有时候需要在联调环境调试对方的接口&#xff0c;可以直接telnet到dubbo的服务通过命令查看已经布的接口和方法&#xff0c;并能直接invoke具体的方法&#xff…

转-聚合查询变慢-详解Elasticsearch的Global Ordinals与High Cardinality

转自&#xff1a; https://blog.csdn.net/zwgdft/article/details/83215977 【README】 Elasticsearch中的概念很多&#xff0c;本文将从笔者在实践过程中遇到的问题出发&#xff0c;逐步详细介绍 Global Ordinals 和 High Cardinality &#xff0c;这也是笔者的认知过程。文中…

SpringBoot配置Mybatis的两种方式(通过XML配置和通过YML配置文件配置)

一、 通过XML的方式配置Mybatis 在 /src/main/resource下创建Mybatis配置文件 mybatis-config.xml 和 映射文件目录mapper在application.yml指定Mybatis配置文件、映射文件的位置 可选&#xff1a; - mybatis.config-location&#xff1a;配置 mybatis-config.xml 路径mybatis…