Explain 性能分析

news2024/11/30 8:44:51

目录

1. 能干什么

2. 如何分析

3. 各字段解释


1. 能干什么

使用 explain+sql 的方式,分析查询语句的性能瓶颈。

① 表的读取顺序;
② 数据读取操作的操作类型;
③ 哪些索引可以使用;
④ 哪些索引被实际使用;
⑤ 表之间的引用;
⑥ 每张表有多少行被优化器查询。

2. 如何分析

先看一下,执行下面每一条 SQL 后各自对应的结果。

EXPLAIN SELECT * FROM USER WHERE NAME = "刘德华"
EXPLAIN SELECT * FROM USER WHERE NAME = "栈老师"
EXPLAIN SELECT * FROM USER WHERE ID = 1
EXPLAIN SELECT * FROM USER WHERE ID = 5

先进行一下简单的分析,从执行计划中可以看出:

① 依据索引查的话,type 和 ref 的值都为 const,而依据名字查时,type 的值是 all,代表全表查找,ref 为空;

② 索引查询相关的 key 列都是 primary,并且 key 的长度正是索引的长度(int 类型为 4);

③ row 代表找到数据之前,扫描的行数,索引查询的 row 为 1,名字查询的 row 为 6,因为它要进行全表扫描,扫描 6 条数据;

filtered = 100 * 最终记录数 / 扫描记录数,显然,filter 越大性能越好。对于索引查询,我们最终查到了一条数据,它也只扫描了一次,所以最终的 filtered 就是 100,名字查询的 filter = 100 * 1 / 6 =  16.67。

3. 各字段解释

1. id select 查询的序列号,包含一组数字,表示查询中执行 select 子句或操作表的顺序。
2. select_type:代表查询的类型,主要是用于区别普通查询、联合查询、子查询等的复杂查询,取值范围如下:
simple :简单的 select 查询,查询中不包含子查询或者 UNION
primary :查询中若包含任何复杂的子部分,最外层查询则被标记为 primary
derived :在 FROM 列表中包含的子查询被标记为 DERIVED ( 衍生 ) MySQL 会递归执行这些
子查询 , 把结果放在临时表里。
subquery :在 SELECT WHERE 列表中包含了子查询
depedent subquery :在 SELECT WHERE 列表中包含了子查询,子查询基于外层
uncacheable subquery :无法使用缓存的子查询
union :若第二个 SELECT 出现在 UNION 之后,则被标记为 UNION ;若 UNION 包含在
FROM 子句的子查询中,外层 SELECT 将被标记为: DERIVED
union result :从 UNION 表获取结果的 SELECT
3. table 这个数据是基于哪张表的。
4. type:是查询的访问类型。是较为重要的一个指标,结果值从最好到最坏依次是: system > const > eq_ref > ref > range > index > ALL。
system :表只有一行记录(等于系统表),这是 const 类型的特列,平时不会出现,这个也
可以忽略不计。
const :表示通过索引一次就找到了, const 用于比较 primary key 或者 unique 索引。因为
只匹配一行数据,所以很快。如将主键置于 where 列表中, MySQL 就能将该查询转换为一个
常量。
eq_ref :唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配。常见于主键或唯一
索引扫描。
ref :非唯一性索引扫描,返回匹配某个单独值的所有行。本质上也是一种索引访问,它返回
所有匹配某个单独值的行,然而,它可能会找到多个符合条件的行,所以他应该属于查找和扫
描的混合体。
range :只检索给定范围的行,使用一个索引来选择行。 key 列显示使用了哪个索引一般就是
where 语句中出现了 between < > in 等的查询这种范围扫描索引扫描比全表扫描要
好,因为它只需要开始于索引的某一点,而结束语另一点,不用扫描全部索引。
index :出现 index sql 使用了索引但是没用索引进行过滤,一般是使用了覆盖索引或者是
利用索引进行了排序分组。
all :将遍历全表以找到匹配的行。
5. possible_keys 显示可能应用在这张表中的索引,一个或多个。查询涉及到的字段上若存在索
引,则该索引将被列出,但不一定被查询实际使用。
6. key 实际使用的索引。如果为 NULL ,则没有使用索引。
7. key_len 表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度。 key_len 显示的值为索引字段的最大可能长度,并非实际使用长度。

8. ref 显示索引的哪一列被使用了,如果可能的话,是一个常数。哪些列或常量被用于查找索引列上的值。
9. rows 显示 MySQL 认为它执行查询时必须检查的行数,越少越好。
10. Extra:其他的额外重要的信息。

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

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

相关文章

Latex之在作者名字后面加上OCRID的图标

\usepackage{orcidlink} \author{Bob\textsuperscript{\orcidlink{0000-0000-0000-0000}}}效果如图

Java8实战-总结27

Java8实战-总结27 用流收集数据分区分区的优势将数字按质数和非质数分区 用流收集数据 分区 分区是分组的特殊情况&#xff1a;由一个谓词(返回一个布尔值的函数)作为分类函数&#xff0c;它称分区函数。分区函数返回一个布尔值&#xff0c;这意味着得到的分组Map的键类型是B…

浅谈C++|STL初识篇

一.STL的诞生 长久以来&#xff0c;软件界一直希望建立一种可重复利用的东西。 .C的面向对象和泛型编程思想&#xff0c;目的就是复用性的提升 大多情况下&#xff0c;数据结构和算法都未能有一套标准,导致被迫从事大量重复工作 为了建立数据结构和算法的一套标准&#xff0c;诞…

linux入门---命名管道

如何创建命名管道 使用mkfifo函数就可以在程序里面创建管道文件&#xff0c;该函数的声明如下&#xff1a; 该函数需要两个参数&#xff0c;第一个参数表示要在哪个路径下创建管道文件并且这个路径得待上管道文件的名字&#xff0c;因为每个文件都有对应的权限&#xff0c;所…

基于springboot+vue的网络海鲜商城

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

【Spatial-Temporal Action Localization(二)】论文阅读2017年

文章目录 1. ActionVLAD: Learning spatio-temporal aggregation for action classification [code](https://github.com/rohitgirdhar/ActionVLAD/)[](https://github.com/rohitgirdhar/ActionVLAD/)摘要和结论引言&#xff1a;针对痛点和贡献相关工作模型框架思考不足之处 2.…

Windows下防火墙端口配置

在电脑或者服务器上部署某个应用后&#xff0c;如果需要对外提供服务可能就需要在主机防火墙上设置开启需要的端口&#xff0c;那么具体怎样操作呢 1.打开windows防火墙 2.设置防火墙入站规则 如下图“高级安全Windows Defender 防火墙”页面&#xff0c;点击左侧“入站规则”…

5.10.WebRTC接口宏

那今天呢&#xff1f;我给大家介绍一下web rtc的接口宏&#xff0c;那之所以在现成的章节中要介绍接口宏。是由于接口在调用的过程中啊&#xff0c;会发生线程的切换&#xff0c;所以把接口宏这部分知识我们放在线程这一章还算比较合适的。 那另外呢&#xff0c;我们对于接口…

【Linux-day11-线程的创建与同步】

Linux 线程的创建与同步 线程的概念 线程是进程内部的一条执行序列或执行路径&#xff0c;一个进程可以包含多条线程。 进程与线程的区别 进程是资源分配的最小单位&#xff0c;线程是 CPU 调度的最小单位进程有自己的独立地址空间&#xff0c;线程共享进程中的地址空间进…

ODC解读:数据脱敏在数据库协同开发的关键作用

肖杨 OceanBase生态产品研发工程师 OceanBase 生态产品研发工程师&#xff0c;山地骑行爱好者&#xff0c;ODC 团队核心成员&#xff0c;负责数据安全合规和系统集成&#xff0c;对 Java EE、 AI 大模型、MCU 芯片 等技术有着浓厚兴趣。 在数据库协同开发领域&#xff0c;敏感…

Spring MVC 七 - Locale 本地化

Spring各模块都支持国际化&#xff0c;SpringMVC也同样支持。DispatcherServlet通过Locale Resovler自动根据客户端的Locale支持国际化。 request请求上来后&#xff0c;DispatcherServlet查找并设置Locale Resovler&#xff0c;我们可以通过RequestContext.getLocale()获取到…

ipad手写笔哪个好用?电容笔性价比高的品牌

现今&#xff0c;使用电容笔的人越来越多&#xff0c;各大品牌厂商对于电容笔各种性能的设计也愈发用心。那么&#xff0c;电容笔哪个品牌性价比高&#xff1f;下面&#xff0c;我来给大家推荐几款好用又平价的电容笔&#xff0c;可以当个参考。 一、主动式电容笔和被动式电容…

mysql 密码修改

1、使用mysqladmin修改root密码 使用 mysqladmin 命令修改 MySQL 的 root 用户密码格式为 mysqladmin -u用户名 -p旧密码 password 新密码 注意&#xff1a;下图修改密码的命令中 -uroot 和 -proot 是整体&#xff0c;不要写成 -u root -p root&#xff0c;-u 和 root 间可以加…

分享一下蛋糕店怎么在微信小程序上开店

蛋糕店如何在微信小程序上开店 随着移动互联网的发展&#xff0c;微信小程序作为一种新型的商业模式&#xff0c;正逐渐成为各行各业拓展线上业务的重要手段。对于蛋糕店来说&#xff0c;利用微信小程序开店&#xff0c;不仅有利于拓展销售渠道&#xff0c;还能提高品牌知名度…

动漫小可爱-网页添加L2Dwidget.js

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>动漫小可爱</title><link rel"stylesh…

windows下MySQL服务不见,服务无法启动,服务闪退,提示“本地计算机上的MySQL服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止”

文章目录 前情提示1.解决MySQL服务消失2.解决MySQL服务无法启动 前情提示 后台启动MySQL服务出现闪退 或 “本地计算机上的MySQL服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止”&#xff0c;可以参考以下方法。 我的电脑上安装了双版本MySQL&#xff0c;这里…

Zabbix监控平台概念

1.概念 Zabbix是一款开源的、免费的、分布式监控平台支持web管理&#xff0c;WEB界面可以方便管理员使用可以监控硬件服务器CPU温度、风扇转速、操作系统CPU、EME、DISK、I/O、流量宽带、负载、端口、进程等Zabbix是C/S架构&#xff0c;Client客户端和Server端组成 2.Zabbix可…

2596. 检查骑士巡视方案(Java)

骑士在一张 n x n 的棋盘上巡视。在有效的巡视方案中&#xff0c;骑士会从棋盘的 左上角出发&#xff0c;并且访问棋盘上的每个格子恰好一次 。 给你一个 n x n 的整数矩阵 grid &#xff0c;由范围 [0, n * n - 1] 内的不同整数组成&#xff0c;其中 grid[row][col] 表示单元格…

碎片笔记 | 大模型攻防简报

前言&#xff1a;与传统的AI攻防&#xff08;后门攻击、对抗样本、投毒攻击等&#xff09;不同&#xff0c;如今的大模型攻防涉及以下多个方面的内容&#xff1a; 目录 一、大模型的可信问题1.1 虚假内容生成1.2 隐私泄露 二、大模型的模型安全问题&#xff08;传统AI攻防&…

vue中实现瀑布流布局

父组件 <template><WaterfallFlow :list"list"/> </template><script setup lang"ts">import WaterfallFlow from "/components/WaterfallFlow.vue"; import {reactive} from "vue"; type listType {height…