MySQL执行计划分析

news2024/11/17 19:33:23

执行计划中的常见的列的解释:

type

system/const :用户主键索引或者唯一索引查询时,只能匹配 1 条数据。一般可以对 sql 查询语句优化成一个常量,那么 type 一般就是 system 或者 const,system 是 const 的一个特例(表中只有一条数据)。

如:explain select * from (select * from film where id = 1) tmp;

eq_ref :在进行连接查询时,例如 left join 时,如果是使用主键索引或者唯一索引连接查询 ,结果返回一条数据,则 type 的值为一般为 eq_ref。

ref : 相比较 eq_ref,不使用主键索引或者唯一索引,使用的是普通索引或者唯一索引的部分前缀,索引与一个值进行比较后可能获取到多个符合条件的行,不在是唯一的行了。

range :通常使用范围查找,例如between,in,<,>,>= 等使用索引进行范围检索。

index :扫描索引树就能获取到的数据,一般是扫描二级索引,并且不会从根节点扫描,一般直接扫描二级索引的叶子节点,速度比较慢。因为二级索引叶子节点不保存表中其他字段数据 只保存主键,所以二级索引还是比较小的,扫描速度相比 All 还是很快的。

这里用到了覆盖索引,什么是覆盖索引:可以直接遍历索引树就能获取数据叫做覆盖索引。这里遍历 name 索引树就可以获取到主键 id 的值就是覆盖索引。

ALL :这是一种效率最低的 type,需要扫描主键索引树的叶子节点,获取数据是表中其他列的数据,即全表扫描。

一般来说我们优化到 range 就可以了 最好到 ref


possible_keys


可能用到的key,在优化器生成执行计划之前,优化器会生成多个方案(走哪个索引,全表扫描等),并计算成本(IO成本和CPU成本),这个字段就是记录优化器生成方案的索引,possible_keys越多,那么生成的方案就越多,对性能的消耗就越多,所以该列越少越好。

key


实际用到的索引。

key_len


用到索引的长度,该列可以用来判断我们用了联合索引的多少个列,比如我们有联合索引a,b,c,a和b是varchar(100)并可以为null,c是int不为null,表的字符集为utf-8(一个字符1-3个字节)。

key_len为303:只用到了a
key_len为606:只用到了a,b
key_len为610:只用到了a,b,c
为什么走a是303,多了3,MySQL规定可以为null就多1,可变长就多2,所以是303。

extra

No tables used:查询没有用到表,如 SELECT 1
Impossible WHERE:查询中包含不可能成立的条件,如 1 != 1
Using Index:查询的列全部在二级索引上存在,不需要回表(覆盖索引)。
Using index condition:不需要server进行判断,通过二级索引就可以判断。
Using where:要在server执行的判断。
using join buffer:使用了join buffer来加快连接查询。
using temporary:使用了派生表。
using filesort:不能用索引的B+树进行排序时,ORDER BY会用到内存和磁盘来完成排序。

下面我们用mysql自带的sakila数据库中的表来进行相关的测试

对于payment表,我们看一下它的结构

具体的案例

下面执行第一条查询语句的执行计划

explain select * from payment where payment_id=1;

执行结果如下:

id:自增序号,还可以用来标识驱动表

select_type:查询类型,SIMPLE代表直接对表的简单查询

table:查询的哪一张表

partitions:坐落的分区,分区表一般不用,所以一般这个字段是null

type:索引检索类型,const代表常数(只找到唯一的记录的)查询,效率很高

possible_keys:与当前查询相关的备选索引有哪些,PRIMARY是主键

key:实际使用的索引是哪个

key_len:代表用到的索引值的长度,跟数据类型以及用到了哪些列有关,比如联合索引3个字段,但是只用到了两个列的索引,那这个值的长度就只跟那两个列的数据类型以及是否为空有关。

 ref:现实使用哪个列或常数与key一起从表中选择行。

rows:这条查询语句所扫描的预估行数,可能和最终结果不一致。

filter: 过滤比例,不靠谱的字段

extra:扩展的详细信息

对于MRR的我暂时无法复现,找一个网上的例子:

 

 

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

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

相关文章

“第六届世界声博会暨2023科大讯飞全球1024开发者节”开幕式回顾及舆情问题

☞ ░ 前往老猿Python博客 ░ https://blog.csdn.net/LaoYuanPython 2023年10月24日&#xff0c;笔者全程参加了在安徽合肥奥体中心举办的“第六届世界声博会暨2023科大讯飞全球1024开发者节”开幕式主论坛&#xff0c;下面来回顾一下。 一、会议简介 会议主题&#xff1a;“…

windows下使用springboot3.0 和 使用grallVM虚拟机

一&#xff1a;准备环境&#xff1a; JDK17 下载地址 &#xff1a;https://www.oracle.com/java/technologies/downloads/ GrallVM 虚拟机 下载地址&#xff1a;https://www.graalvm.org/downloads/ Gradle 7.5 or Maven 3.5 &#xff08;以上版本&#xff09; visual stud…

SolidworksSimulation完成对压力容器的强度分析

如何通过使用SolidworksSimulation完成对压力容器的分析并查看实 体的膜片应力强度以及弯曲应力强度&#xff0c;操作简单易学&#xff0c;让我们进入到操作界面。 我们以罐体底部实体模型为例&#xff0c;这里已经提前设置好了材料。 点击新算例&#xff0c;选择静应力分析 由…

【三维重建-PatchMatchNet复现笔记】

【三维重建-PatchMatchNet复现笔记】 1 突出贡献2 数据集描述3 训练PatchMatchNet3.1 输入参数3.2 制定数据集加载方式 1 突出贡献 在计算机GPU和运行时间受限的情况下&#xff0c;PatchMatchNet测试DTU数据集能以较低GPU内存和较低运行时间&#xff0c;整体误差位列中等&#…

Mac运行Docker报错

Mac运行Docker报错 &#x1f4d4; 千寻简笔记介绍 千寻简笔记已开源&#xff0c;Gitee与GitHub搜索chihiro-notes&#xff0c;包含笔记源文件.md&#xff0c;以及PDF版本方便阅读&#xff0c;且是用了精美主题&#xff0c;阅读体验更佳&#xff0c;如果文章对你有帮助请帮我点…

利用扰动模型计算旋转矩阵的导数例题

深蓝学院《自动驾驶与机器人中的SLAM技术》第一次课习题 这里直接贴出图片了&#xff0c;懒得打字了。

计算机基础知识38

创建表的完整语法 create table t1(id int,name varchar(43),age int); create table 库名.表名( 字段名1 数据类型 约束条件 约束条件 约束条件 约束条件, 字段名2 数据类型 约束条件 约束条件 约束条件 约束条件...); 1. 字段名和数据类型必须…

Socket 是什么? 总结+详解

文章摘要&#xff1a;Socket 套接字 编程接口 netstat-ano 创建 建立连接 断开 删除 1.Socket 是什么 Socket &#xff1a;套接字&#xff08;socket&#xff09;是一个抽象层&#xff0c;应用程序可以通过它发送或接收数据&#xff0c;可对其进行像对文件一样的打开、读写和…

Netty 入门 — ByteBuf,Netty 数据传输的载体

上篇文章&#xff08;Netty 入门 — Bootstrap&#xff0c;一切从这里开始&#xff09;&#xff0c;我们了解了 Netty 的第一个核心组件&#xff1a;Bootstrap&#xff0c;它是 Netty 程序的开端。今天我们来熟悉 Netty 的第二个组件&#xff1a;ByteBuf&#xff0c;Netty 数据…

尚硅谷大数据项目《在线教育之实时数仓》笔记003

视频地址&#xff1a;尚硅谷大数据项目《在线教育之实时数仓》_哔哩哔哩_bilibili 目录 第7章 数仓开发之ODS层 P015 第8章 数仓开发之DIM层 P016 P017 P018 P019 01、node001节点Linux命令 02、KafkaUtil.java 03、DimSinkApp.java P020 P021 P022 P023 第7章 数…

GNSS全球卫星导航系统相关技术

一、参考资料 映核物联网&#xff5c;什么是GNSS&#xff1f; 二、GNSS相关介绍 GNSS&#xff08;Global Navigation Statellite System&#xff09;&#xff0c;即全球导航卫星系统&#xff0c;GNSS的作用是定位和导航。至少4颗卫星&#xff0c;实现准确定位。 1. 全球导航…

vue3使用flv播放视频监控

第一种方法使用安装的 npm install --save flv.js&#xff0c;会出现报错的情况&#xff0c;如flv.js播放视频时出现Failed to execute ‘appendBuffer’ on ‘SourceBuffer’ 解决方法[https://www.cnblogs.com/melancholys/p/14085804.html](https://www.cnblogs.com/melanch…

1024版烟花--2的10次方 快乐

效果&#xff1a; import java.awt.*; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent;public class App extends Frame {//背景int b1x[] {0, 666, 666, 0};int b1y[] {00, 0, 666, 666};Thread thread;int count 8;//个数App() {setLayout(new …

Potplayer通过公网访问群晖WebDav,快速搭建远程办公环境

文章目录 1 使用环境要求&#xff1a;2 配置webdav3 测试局域网使用potplayer访问webdav4 内网穿透&#xff0c;映射至公网5 使用固定地址在potplayer访问webdav ​ 国内流媒体平台的内容让人一言难尽&#xff0c;就算是购买了国外的优秀作品&#xff0c;也总是在关键剧情上删删…

apk反编译修改教程系列-----任意修改apk版本号 版本名 防止自动更新【二】

往期教程 apk反编译修改教程系列-----修改apk应用名称 任意修改名称 签名【一】 上期演示了下如何修改apk的名称。相信只要用心的友友都会操作了。这次讲解下如何修改软件的版本号与版本名字的操作 名词浅释&#xff1a; 在apk反编译中的VersionCode---是版本号的意思.是一…

【Linux学习】—Linux常用指令(一)

【Linux学习】—Linux常用指令&#xff08;一&#xff09; 一、组管理和权限管理 在Linux中的每个用户必须属于一个组&#xff0c;不能独立于组外。 1️⃣所有者 一般为文件的创建者&#xff0c;谁创建了该文件&#xff0c;就自然的成为该文件的所有者。 查看文件的所有者…

马尔科夫链、PCV及贝叶斯动图详解

马尔科夫链、主成分分析以及条件概率等概念&#xff0c;是计算机学生必学的知识点&#xff0c;然而理论的抽象性往往让学生很难深入地去体会和理解。而本文&#xff0c;将这些抽象的理论概念&#xff0c;用可视化的方式来解释&#xff0c;还可调节相应参数来改变结果&#xff0…

1997-2021年世界各国GDP数据

1997-2021年世界各国GDP数据 1、时间&#xff1a;1997-2021年 2、来源&#xff1a;世界银行 3、范围&#xff1a;世界各国 4、指标&#xff1a;国内生产总值&#xff08;固定LCU&#xff09;、国内生产总值&#xff08;当前LCU&#xff09;、国内生产总值&#xff08;现值美…

2023年或者每一年值得最被关注的技术趋势是什么?

2023年或者近几年中&#xff0c;值得关注的技术趋势有很多&#xff0c;其中一些主要的包括&#xff1a; 人工智能与机器学习: 人工智能&#xff08;AI&#xff09;和机器学习&#xff08;ML&#xff09;继续在各个行业中引起变革&#xff0c;从医疗保健到金融服务&#xff0c;再…

快速入门Elasticsearch:安装、基本概念、分词器和文档基本操作详解

本文主要介绍快速入门 Elasticsearch&#xff0c;从 安装 、 基本概念 、 分词器 、*** 文档基本操作 *** 这 4 个方面快速入门。 Elasticsearch 是一款近实时的搜索引擎&#xff0c;底层是基于 Lucene 做搜索&#xff0c;再此基础上加入了分布式的特性&#xff0c;以便支持海…