type const mysql_Mysql Explain之type详解

select version():5.7.21

MySQL 提供了一个 EXPLAIN 命令, 它可以对 SQL 语句进行分析, 并输出 SQL 执行的详细信息, 以供开发人员针对性优化.

例如分析一条 SELECT 语句

e378badaf82f85bfb5a4b46ceb0c2fee.png

EXPLAIN 结果中的type字段

Tips:常见的扫描方式

system:系统表,少量数据,往往不需要进行磁盘IO

const:常量连接

eq_ref:主键索引(primary key)或者非空唯一索引(unique not null)等值扫描

ref:非主键非唯一索引等值扫描

range:范围扫描

index:索引树扫描

ALL:全表扫描(full table scan)

type扫描方式由快到慢

1.system

46c41a2f11d90ffafbe3b58fb64420da.png

上例中,从系统库mysql的系统标proxies_priv里查询数据,这里的数据在Mysql服务启动时候已经加载在内存中,不需要进行磁盘IO。

官方文档中的解释:该表只有一行(=系统表)。这是const联接类型的特例

2.const

模拟数据

Explain分析结果

9cbfff3f53a5f3b3b2c8ac7cb8707b71.png

上例中id是主键(primary key),连接部分是常量1,通过索引一次就能找到,速度非常快

场景:

命中主键(primary key)或者唯一索引(unique)

被连接的部分是一个常量值(const)

3.eq_ref

模拟数据

Explain分析结果

1bd770784b57a1a661cc5709c8816f0f.png

上例中对于前表user表中的每一行(row),对应后user_balance表只有一行被扫描,这类扫描的速度也非常的快

场景:

1、 联表(join)查询

2、 命中主键(primary key)或者非空唯一索引(unique not null)

3、 等值连接

4.ref

模拟数据

同eq_ref模拟数据区别:user_balance表中的主键索引改为普通索引

Explain分析结果

联表查询

f2c7ba3151c1389349a2f42244f8cc4b.png

由于后表使用了普通非唯一索引,对于前表user表的每一行(row),后表user_balance表可能有多于一行的数据被扫描

单表查询

e6d0f11f57200033811a8e9665c160f0.png

当id改为普通非唯一索引后,常量的连接查询,也由const降级为了ref,因为非唯一索引所以有多于一行的数据被可能被扫描

ref每一次匹配可能有多行数据返回,虽然它比eq_ref要慢,但它仍然是一个很快的join类型

场景:

联表查询

普通非唯一索引

5.range

模拟数据

Explain分析结果

between

45203a9acd6bebdb54883b960828a99d.png

in

ac4d5c9d21293172f257d689713befb7.png

,>=,

aa215794272254990894a9938797c16c.png

range比较好理解,它是索引上的范围查询,它会在索引上扫码特定范围内的值

6.index

话外音:当前测试表为InnoDb,MyISAM 内置了一个计数器,count()时它直接从计数器中读

d71257f320922ff091f3d419f9827b1b.png

index类型,需要扫描索引上的全部数据,它仅比全表扫描快一点

7.ALL

模拟数据

Explain分析结果

6a6fcccee8ab4c4b4ade56b23b2f470c.png

如果id上不建索引,则全表扫描

总结

type类型从快到慢:system>const>eq_ref>ref>range>index>ALL

作为一名合格的后端开发者应该熟悉掌握Explain

结合业务建立正确索引,而不是每个字段建立索引(滥用)

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

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

相关文章

Android Intent传递数据

刚开始看郭大神的<>,实现以下里面的一些例子.Intent传递数据. 我们利用显示的方式进行Intent的启动. 1.启动intent并输入数据. Intent intentnew Intent(MainActivity.this,TwoActivity.class);intent.putExtra("data", "hello two");startActivity(…

WCF中的标准绑定

使用过WCF的童鞋们都很清楚&#xff0c;绑定是必须的。我将这些绑定总结了下。 一、标准绑定简要说明 1.basicHttpBinding基于WS-I Basic Profile 1.1 的web服务,所需的.Net Framework版本为 3.0 以上。 2.wsHttpBinding针对改进的web服务的绑定,包括WS-Security,WS-Transactio…

PM2.5空气质量指数(AQI)是如何计算的

源&#xff1a;PM2.5空气质量指数(AQI)是如何计算的 阅读目录 AQI如何计算  空气污染指数分级标准AQI如何计算 具体要计算PM2.5空气质量指数(AQI)&#xff0c;SENBE申贝技术人员向您介绍如何计算的公式。比如当实测浓度小于等于0.035时&#xff0c;根据实测浓度50/0.035计算。…

C++对于大型图片的加载缩放尝试

Qt对于图片的操作主要集中在这几个类 QImage ,QImageReader ,QPixmap 其中QImage这个类对图片的缩放有几个很不错的技巧&#xff0c;不过对于大图片却并不好使&#xff0c;当我们去看QImage的实现代码时&#xff0c;会发现其中读取QImageReader来加载图片&#xff0c;当我们去看…

PHP移动互联网开发笔记(3)——运算符

一、PHP的运算符PHP中有丰富的运算符集&#xff0c;它们中大部分直接来自于C语言。按照不同功能区分&#xff0c;运算符可以分为&#xff1a;算术运算符、字符串运算符、赋值运算符、位运算符、条件运算符&#xff0c;以及逻辑运算符等。当各种运算符在同一个表达式中时&#x…

xadmin与mysql数据库_十八、Django3.0学习之引入xadmin

一、将xadmin导入Django工程中1.1 xadmin下载地址&#xff1a; https://github.com/sshwsfc/xadmin/tree/django2或者&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1VJPsN5GOW_xbiPb8t43oRg提取码&#xff1a;nkei1.2 下载压缩包1.3 到zip目录下&#xff0c;进行pip3 …

WebApi个人理解概要

WebApi概要Global文件的作用&#xff1a; 12345678910111213141516public class MvcApplication : System.Web.HttpApplication{protected void Application_Start(){//1.注册区域路由AreaRegistration.RegisterAllAreas();//2.注册webApi的路由WebApiConfig.Register(GlobalCo…

帮 C/C++ 程序员彻底了解链接器

为什么80%的码农都做不了架构师&#xff1f;>>> http://blog.jobbole.com/96225/ 转载于:https://my.oschina.net/lieefu/blog/547083

12306订票助手java_12306订票助手

权限信息 com.android.alarm.permission.SET_ALARM 读取日历活动和机密信息 添加或修改日历活动&#xff0c;并在所有者不知情的情况下向邀请对象发送电子邮件 完全的网络访问权限 查看网络连接 查看WLAN连接 读取您的USB存储设备中的内容 修改或删除您的USB存储设备中的内容 a…

linux安装软件包(pip, distribute, nose, virtualenv)

一、 先安装pip 1. 先去python官网下载pip&#xff0c;网站&#xff1a;https://pypi.python.org/pypi/pip#downloads&#xff0c;点击下图中的“download” 2. 然后选择下图标注的包&#xff0c;链接可以通过f12获取&#xff0c;具体如下&#xff1a; 3. 然后再linux终端输入&…

event对象获取方法

为什么80%的码农都做不了架构师&#xff1f;>>> http://www.jb51.net/article/42691.htm 转载于:https://my.oschina.net/zxin/blog/547902

【iOS开发每日小笔记(一)】UIPickerView 自动选择某个component的某个row

这篇文章是我的【iOS开发每日小笔记】系列中的一片&#xff0c;记录的是今天在开发工作中遇到的&#xff0c;可以用很短的文章或很小的demo演示解释出来的小心得小技巧。它们可能会给用户体验、代码效率得到一些提升&#xff0c;或是之前自己没有接触过的技术&#xff0c;很开心…

在Hadoop上运行基于RMM中文分词算法的MapReduce程序

原文&#xff1a;http://xiaoxia.org/2011/12/18/map-reduce-program-of-rmm-word-count-on-hadoop/ 在Hadoop上运行基于RMM中文分词算法的MapReduce程序 23条回复我知道这个文章标题很“学术”化&#xff0c;很俗&#xff0c;让人看起来是一篇很牛B或者很装逼的论文&#xff0…

Web服务的调用

1、创建服务引用 例如&#xff1a;天气预报 2、在代码添加引用空间 TvProgram.ChinaTVprogramWebService tpnew TvProgram.ChinaTVprogramWebService(); DataSet dstp.getAreaDataSet();3、引用具体方法 private void comBox1_SelectedIndexChanged(object sender,EventArgs e)…

aref无效 lisp_aref无效 lisp_Common Lisp专题4:数组

1)用make-array创建数组&#xff1a;CL-USER> (make-array 5 :initial-element nil)#(NIL NIL NIL NIL NIL)CL-USER> (make-array 5 :initial-contents (a e i o u))#(A E I O U)CL-USER> (setf arr (make-array 5 :initial-contents (a e i o u)))#(A E I O U)CL-USE…

Visual Studio 快捷键汇总

常见方法&#xff1a; 强迫智能感知&#xff1a;CtrlJ。智能感知是Visual Studio最大的亮点之一&#xff0c;选择Visual Studio恐怕不会没有这个原因。 撤销&#xff1a;CtrlZ。除非你是天才&#xff0c;那么这个快捷键也是最常用的。强迫显示参数信息&#xff1a;Ctrl-Shift-空…

nodejs解析apk

项目再github上的目录&#xff1a;https://github.com/chen2009277025/nodejs_apkToolnodejs无可厚非是新兴的后端语言&#xff0c;因为他的开发语言是javascript&#xff0c;javascript语言的自身优势&#xff0c;让nodejs迅速的火遍大江南北。很多的nodejs的开发插件如雨后春…

VC2013 代码图,依赖项关系图,等出错解决办法.

环境WIN10VS2013SQL2015 当VS2013代码图,依赖项关系图等出现 数据库连接错误时 去http://www.microsoft.com/zh-cn/download/details.aspx?id29062 下载 SqlLocalDB.MSI进行安装 怀疑是先装了SQL2015后安装VS2013时默认未安装SqlLocalDB.MSI导致.转载于:https://www.cnblogs.c…

POJ 1330 LCA最近公共祖先 离线tarjan算法

题意要求一棵树上&#xff0c;两个点的最近公共祖先 即LCA 现学了一下LCA-Tarjan算法&#xff0c;还挺好理解的&#xff0c;这是个离线的算法&#xff0c;先把询问存贮起来&#xff0c;在一遍dfs过程中&#xff0c;找到了对应的询问点&#xff0c;即可输出 原理用了并查集和dfs…

deferred Transports Protocols 简单介绍

2019独角兽企业重金招聘Python工程师标准>>> Twisted架构概览 Twisted是一个事件驱动型的网络引擎。由于事件驱动编程模型在Twisted的设计哲学中占有重要的地位&#xff0c;因此这里有必要花点时间来回顾一下究竟事件驱动意味着什么。 事件驱动编程是一种编程范式&a…