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(…

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

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

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…

Visual Studio 快捷键汇总

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

deferred Transports Protocols 简单介绍

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

java web 请求跟踪_IT兄弟连 JavaWeb教程 Servlet会话跟踪 Cookie技术

原标题&#xff1a;IT兄弟连 JavaWeb教程 Servlet会话跟踪 Cookie技术Cookie使用HTTPHeader传递数据。Cookie机制定义了两种报头&#xff0c;Set-Cookie报头和Cookie报头。Set-Cookie报头包含于Web服务器的响应头(ResponseHeader)中&#xff0c;Cookie报头包含在浏览器客户端请…

关于easyUI在子页面增加显示tabs的一个问题

关于easyUI在子 在父页面点个链接能动态看到子页面的情况太简单&#xff0c;请看easyUI官网&#xff1a;http://www.jeasyui.com/tutorial/layout/tabs2.php 现在说的是在子页面点个按钮也能触发增加子页面的情况。 情景是&#xff0c;在父页面上有个div如&#xff1a; Html代…

SDN第二次上机作业

1、安装floodlight 2、生成拓扑并连接控制器floodlight&#xff0c;利用控制器floodlight查看图形拓扑 3、利用字符界面下发流表&#xff0c;使得‘h1’和‘h2’ ping 不通 4、利用字符界面下发流表&#xff0c;通过测试‘h1’和‘h3’的联通性&#xff0c;来验证openflow的har…

PHP的钩子实现解析

2019独角兽企业重金招聘Python工程师标准>>> 钩子是编程里一个常见概念&#xff0c;非常的重要。它使得系统变得非常容易拓展&#xff0c;&#xff08;而不用理解其内部的实现机理&#xff0c;这样可以减少很多工作量&#xff09;。只要有一个钩子样本&#xff0c;能…

Beta冲刺! Day2 - 砍柴

Beta冲刺&#xff01; Day2 - 砍柴 今日已完成 晨瑶&#xff1a;大致确定了文章推荐的算法思路&#xff08;Content-based recommender&#xff09;&#xff1b;理清了不少feature的事宜昭锡&#xff1a;修复了日期选择越界时导致程序崩溃和点击光点返回后&#xff0c;日期选择…

Android版添加phonegap--websocket客户端插件教程

2019独角兽企业重金招聘Python工程师标准>>> 1.在Eclipse中新建Android Project项目chatdemo2.把animesh kumar的websocket-android-phonegap项目java文件打成phonegap-websocket-support.jar包&#xff0c;存放在 android project的libs目录下3.把websocket.js存放…

java参数传入的是一个类名_Java编程细节——泛型的定义(类、接口、对象)、使用、继承...

1. 设计泛型的初衷&#xff1a;1) 主要是为了解决Java容器无法记忆元素类型的问题&#xff1a;i. 由于Java设计之初并不知道会往容器中存放什么类型的元素&#xff0c;因此元素类型都设定为Object&#xff0c;这样就什么东西都能放了&#xff01;ii. 但是这样设计有明显的缺点&…

Linux环境下安装部署AWStats日志分析系统实例

AWStats是使用Perl语言开发的一款开放性日志分析系统&#xff0c;可分析Apache网站服务器的访问日志&#xff0c;还可以用来分析Samba、Vsftpd、IIS等日志信息。此文章主要讲解如何在linux系统下安装部署关于对Apache网站服务站日志分析的AWStats。实验步骤一&#xff0c;安装部…

HDU4911 Inversion 解题报告

题意&#xff1a;求逆序对 解题思路&#xff1a;1)树状数组 离散化 解题代码&#xff1a; 1 // File Name: a.cpp2 // Author: darkdream3 // Created Time: 2014年08月05日 星期二 12时05分09秒4 5 #include<vector>6 #include<list>7 #include<map>8 #inc…

springmvc的国际化

1&#xff1a;三个国际化资源文件 i18n.usernameUsername i18n.passwordPassword i18n.username\u7528\u6237\u540D i18n.password\u5BC6\u7801 i18n.usernameUsername i18n.passwordPassword 2&#xff1a;在spring中配置国际化资源文件 <!-- 配置国际化资源文件 --><…

.9-浅析webpack源码之NodeEnvironmentPlugin模块总览

介绍Compiler的构造比较无趣&#xff0c;不如先过后面的&#xff0c;在用到compiler的时候再做讲解。 这一节主要讲这行代码&#xff1a; // 不管这里 compiler new Compiler(); compiler.context options.context; compiler.options options; // 看这里 new NodeEnvironmen…

java单例模式的七种写法_Java设计模式之单例模式的七种写法

什么是单例模式&#xff1f;单例模式是一种常见的设计模式&#xff0c;单例模式的写法有很多种&#xff0c;这里主要介绍三种&#xff1a; 懒汉式单例模式、饿汉式单例模式、登记式单例 。单例模式有以下特点&#xff1a;1、单例类只能有一个实例。2、单例类必须自己创建自己唯…