mysql优化之explain详解

news2024/10/5 22:02:19

        mysql的explain(执行计划)用于解释sql的执行的过程,然后把sql的执行过程用一张表格表示出来,它并不真正的执行sql,如下图。explain能够为我们优化sql提供很好参考作用。

下面我来看下执行计划表中各个字段是什么意思

 id(select的序号)

        每一行数据代表一个select,id越大越先执行,id相同则从上往下执行,id为null的最后执行。

select_type(查询的类型)

        SIMPLE:简单查询,没有子查询等等,简单YYDS。

        PRIMART:复杂查询,包含子查询等的select,通常是最外层的查询。

        SUBQUERY:子查询。

        DERIVED:衍生查询,会产生临时表的查询。

        UNION:联合查询,union中的第二查select开始。

table(当前行访问的表)

        <derivedN>:先执行id=N的衍生查询。

        <unionN,M>:表示参与联合查询的行id。

        NULL:mysql能够在优化阶段分解查询语句,在执行阶段用不着再访问表或索引。例如:在索引列中选取最小值,可以单独查找索引来完成,不需要在执行时访问表。

type(如何查询行)

        查询速速最快到最慢依次为:system > const > eq_ref > ref > range > index > ALL,通常情况下建议至少达到ref。

        const:mysql能对查询的某部分进行优化并将其转化成一个常量。用于 primary key 或 unique key 的所有列与常数比较时,所以表最多有一个匹配行,读取1次,速度比较快。

        system:const的特例,表里只有一条元组匹配时为system。

        eq_ref:primary key 或 unique key 索引的所有部分被连接使用 ,最多只会返回一条符合条件的记录。const 之外最好的联接类型,简单的 select 查询不会出现这种 type。

        ref:使用普通索引或者唯一性索引的部分前缀,索引要和某个值相比较,可能会找到多个符合条件的行。

        range:范围扫描通常出现在 in(), between ,> ,<, >= 等操作中。使用一个索引来检索给定范围的行。

        index:扫描全索引就能拿到结果,一般是扫描某个二级索引,这种扫描不会从索引树根节点开始快速查找,而是直接 对二级索引的叶子节点遍历和扫描,速度还是比较慢。

        all:扫描全表。

possible_keys

      这个表示该条select可能用到的索引。

key

       这个表示该条select用到的索引。

key_len

       索引里使用的字节数,通过这个值可以算出具体使用了索引中的哪些列,5.0.3以后版本中,char(n)和varchar(n),n均代表字符数,而不是字节数,如果是utf-8,一个数字或字母占1个字节,一个汉字占3个字节。 key_len 计算规则如下

       char(n):如果存汉字长度就是 3n 字节。

       varchar(n):如果存汉字则长度是 3n + 2 字节,加的2字节用来存储字符串长度,因为 varchar是变长字符串 。

       tinyint:1字节

       smallint:2字节

       int:4字节

       bigint:8字节

       date:3字节

       timestamp:4字节

       datetime:8字节

ref

       说明该select在表查找值所用到的列或常量,常见的有:const(常量),字段名(例:film.id),可以理解为where条件中等号右边的值是一个常量或一个字段。

rows

        表示该select查询是要扫描到行数,不是查询结果集的行数。

extra

        一些额外信息。常见的重要值如下 

        Using index:覆盖索引,意思是只需通过二级索引就能满足该sql的查询条件以及查询结果,不需要通过二级索引去寻找主键索引。

        Using where:where条件未被索引覆盖到,就是全表扫描

        Using index condition:未完全用索引,比如我们一般建立一个联合索引,有三个字段,但是现在我们的where条件里只用到了第一个或者前两个字段,这种就是Using index condition,也叫用了,但没有完全用索引。

        Using temporary:使用了临时表,mysql需要创建一张临时表来处理查询。出现这种情况一般是要进行优化的。

        Using filesort:文件排序,将用外部排序而不是索引排序,数据较小时从内存排序,否则需要在磁盘完成排序。这种情况下一 般也是要考虑使用索引来优化的。可以考虑给排序字段加上索引。

        Select tables optimized away:聚合函数访问字段。

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

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

相关文章

【Linux】kill 命令使用

经常用kill -9 XXX 。一直在kill&#xff0c;除了kill -9 -15 &#xff0c;还能做什么&#xff1f;今天咱们一起学习一下。 kill 命令用于删除执行中的程序或工作。 kill命令 -Linux手册页 命令选项及作用 执行令 man kill 执行命令结果 参数 -l 信号&#xff0c;若果…

【吞噬星空】又被骂,罗峰杀人目无法纪,但官方留后手,增加审判戏份

Hello,小伙伴们&#xff0c;我是小郑继续为大家深度解析国漫吞噬星空资讯。 吞噬星空动画中&#xff0c;罗峰复仇的戏份&#xff0c;简直是帅翻了&#xff0c;尤其是秒杀阿特金三大巨头&#xff0c;让人看的也是相当的解气&#xff0c;相当的爽&#xff0c;一点都不拖沓&#x…

有什么站内搜索引擎优化的方法?今天跟大家分享!

在你的网站上安装站内搜索引擎对于提升用户体验和增加互动至关重要。在今天快节奏的数字世界中&#xff0c;用户希望能够快速、轻松地找到信息。通过提供站内搜索引擎&#xff0c;用户能够轻松浏览你的网站&#xff0c;帮助他们找到他们正在寻找的具体信息。接下来我将跟大家介…

浅析高校用电问题及智慧电力监管平台的构建

安科瑞 崔丽洁 摘 要&#xff1a;介绍了当前高校用电存在的问题&#xff0c;进行了原因分析&#xff0c;由此提出建立高校用电智慧监管平台。对高校用电智慧监管平台的构架进行设计&#xff0c;运用物联网技术&#xff0c;实现各回路实时自主控制&#xff0c;并细化管理权限&a…

ATA-8202射频功率放大器在超声雾化研究中的应用

超声雾化技术是一种利用高频声波能量产生微细液滴的技术&#xff0c;广泛应用于医学、生物科学、材料科学等领域。在超声雾化过程中&#xff0c;功率放大器扮演着关键的角色&#xff0c;它能提供足够的能量来驱动超声发射装置&#xff0c;并调节声波参数&#xff0c;实现有效的…

【数据结构】线性表(八)队列:顺序队列及其基本操作(初始化、判空、判满、入队、出队、存取队首元素)

文章目录 一、队列1. 定义2. 基本操作 二、顺序队列0. 顺序表1. 头文件和常量2. 队列结构体3. 队列的初始化4. 判断队列是否为空5. 判断队列是否已满6. 入队7. 出队8. 存取队首元素9. 主函数10. 代码整合 堆栈Stack 和 队列Queue是两种非常重要的数据结构&#xff0c;两者都是特…

论文浅尝 | Concept2Box:从双视图学习知识图谱的联合几何嵌入模型

笔记整理&#xff1a;张钊源&#xff0c;天津大学硕士&#xff0c;研究方向为知识图谱 链接&#xff1a;https://virtual2023.aclweb.org/paper_P4210.html 动机 知识图嵌入&#xff08;KGE&#xff09;已被广泛研究&#xff0c;用于嵌入大规模关系数据以满足许多现实世界的应用…

Spring Security总体架构介绍

参考&#xff1a;架构 :: Spring Security Reference (springdoc.cn) 一、过滤器 Spring Security 框架对 Servlet 请求的处理是基于过滤器机制。 容器会提前创建好FilterChain对每一个请求进行过滤&#xff0c;FilterChain中包含Filter 实例和 Servlet&#xff08;Spring MV…

编写后台登录滑动成功获取验证码 人机验证

vue-puzzle-vcode Vue 纯前端的拼图人机验证、右滑拼图验证 安装vue-puzzle-vcode npm install vue-puzzle-vcode --save使用vue-puzzle-vcode import Vcode from "vue-puzzle-vcode";<Vcode :show"isShow" success"onSuccess" close"…

ZooKeeper+HBase分布式集群环境搭建

安装版本&#xff1a;hadoop-2.10.1、zookeeper-3.4.12、hbase-2.3.1 一、zookeeper集群搭建与配置 1.下载zookeeper安装包 2.解压移动zookeeper 3.修改配置文件&#xff08;创建文件夹&#xff09; 4.进入conf/ 5.修改zoo.cfg文件 6.进入/usr/local/zookeeper-3.4.12/zkdat…

虚拟机与主机(win10之间的通信)

(201条消息) Ubuntu虚拟机不显示ip地址【已解决】_ubuntu没有ip_不爱赖床的懒虫的博客-CSDN博客 sudo /sbin/dhclient VMTool安装与卸载 (201条消息) ubuntu中vmtools的安装与彻底卸载_卸载vmtools_林麦安的博客-CSDN博客 (202条消息) 解决虚拟机安装 VMware Tools 灰色无法…

聊聊RocketMQ中的broker的TPS和QPS为何相差巨大,是如何统计的

这里是weihubeats,觉得文章不错可以关注公众号小奏技术&#xff0c;文章首发。拒绝营销号&#xff0c;拒绝标题党 最近在看RocketMQ的一些监控指标的时候&#xff0c;总觉得一些监控指标不太对&#xff0c;好像对不上。 所以打算研究下看看RocketMQ中的 broker TPS、broker QP…

嵌入式学习笔记(60)内存管理之堆

1.7.1.什么是堆&#xff08;heap&#xff09; 内存管理对OS来说是一件非常复杂的事&#xff0c;因为首先内存容量大&#xff0c;其次内存需求在时间和大小块上没有规律&#xff08;OS上运行着几十、几百、几千个进程随时都会申请或者释放内存&#xff0c;申请或者释放的内存块…

JavaWeb从入门到起飞笔记——导学课程

学完这一节&#xff0c;我不知道学Web开发究竟能干什么&#xff1f;你知道吗&#xff1f; 以下是黑马程序员Java从入门到起飞的笔记 一、学完Javaweb能干什么&#xff1f; 学完Java后我们可以独立开发一些后台管理系统&#xff0c;例如CRMER器&#xff0c;京东和淘宝&#x…

tuxera ntfs2024破解版mac电脑磁盘读写软件

大家都知道由于操作系统的原因&#xff0c;在苹果电脑上不能够读写NTFS磁盘&#xff0c;但是&#xff0c;今天小编带来的这款tuxera ntfs 2024 mac版&#xff0c;完美的解决了这个问题。这是一款在macOS平台上使用的磁盘读写软件&#xff0c;能够实现苹果Mac OS X系统读写Micro…

C++ 字符串编码转换封装函数,UTF-8编码与本地编码互转

简介 字符串编码转换封装函数&#xff0c;UTF-8编码与本地编码互转。 中文乱码的解决方法 有时候我们会遇到乱码的字符串&#xff0c;比如&#xff1a; 古文码 可能是用GBK方式读取UTF-8编码的中文导致的&#xff0c;用下面的Utf8ToLocal(string str)函数转换一下就可以了。…

RFID解决光伏难题

RFID解决光伏难题 RFID是无线射频识别&#xff08;Radio Frequency Identification&#xff09;的缩写&#xff0c;是一种通过无线电信号识别物体的技术。RFID系统由标签、读写器和主机系统组成。标签内置有微型芯片和天线&#xff0c;能够储存和传输数据。读写器通过射频信号…

EasyCVR视频智能分析系统如何助力广场流动摊贩监管手段升级

在很多公园广场地带&#xff0c;经常会有流动摊贩进行售卖&#xff0c;虽然国家大力支持“地摊经济”&#xff0c;但很多摊贩并未按照规定进行摆摊&#xff0c;甚至有一些摊贩为了位置、客源大打出手&#xff0c;大大增添了城市管理难度。为让广场摊贩更加规范地进行作业&#…

mybatisplus开启sql打印的三种方式

1、在application.yml文件中添加mybatisplus的配置文件 使用mybatisplus自带的log-impl配置&#xff0c;可以在控制台打印出sql语句、执行结果的数据集、数据结果条数等详细信息&#xff0c;这种方法适合再调试的时候使用&#xff0c;因为这个展示的信息详细&#xff0c;更便于…

Windows11系统安装WSL教程

WSL&#xff0c;全称Windows Subsystem for Linux&#xff0c;是微软官方提供的可以在Windows上直接运行的Linux环境&#xff0c;包括大多数命令行工具、程序和应用&#xff0c;由系统底层虚拟机平台支持。 开启相关服务 1、控制面板-启用或关闭Windows功能 2、勾选以下两个…