动力节点索引优化解决方案学习笔记——性能分析

news2025/1/17 4:41:43

2. 性能分析

2.1 MySQL常见瓶颈

SQL中对大量数据进行比较、关联、排序、分组时CPU的瓶颈。
实例内存满足不了缓存数据或排序等需要,导致产生大量的物理IO。查询数据时扫描过多数据行,导致查询效率低。

2.2 Explain

使用EXPLAIN关键字可以模拟优化器执行SQL查询语句,从而知道MYSQL是如何处理SQL语句的。可以用来分析查询语句或是表的结构的性能瓶颈。其作用:
1)表的读取顺序
2)哪些索引可以使用
3)数据读取操作的操作类型
4)那些索引被实际使用
5)表之间的引用
6)每张表有多少行被优化器查询
EXPLAIN关键字使用起来比较简单: explain + SQL语句:

例子:

--  创建四张测试表
CREATE TABLE t1(
	id INT(10) AUTO_INCREMENT,
	content  VARCHAR(100),  
	PRIMARY KEY (id)
);
CREATE TABLE t2(
	id INT(10) AUTO_INCREMENT,
	content  VARCHAR(100),
	PRIMARY KEY (id)
);
CREATE TABLE t3(
	id INT(10) AUTO_INCREMENT,
	content  VARCHAR(100),
	PRIMARY KEY (id)
	);
CREATE TABLE t4(
	id INT(10) AUTO_INCREMENT,
	content  VARCHAR(100),
	PRIMARY KEY (id)
);

-- 每张表中添加一条数据
INSERT INTO t1(content) VALUES(CONCAT('t1_',FLOOR(1+RAND()*1000)));

INSERT INTO t2(content) VALUES(CONCAT('t2_',FLOOR(1+RAND()*1000)));

INSERT INTO t3(content) VALUES(CONCAT('t3_',FLOOR(1+RAND()*1000)));
	
INSERT INTO t4(content) VALUES(CONCAT('t4_',FLOOR(1+RAND()*1000)));

然后我们使用Explain去分析SQL语句

2.3 Explain重要字段名

2.3.1 id

select查询的序列号,表示查询中执行select子句或操作表的顺序。
id相同时,执行顺序由上至下
id不同时,如果是子查询,id的序号会递增,id值越大优先级越高,则先被执行。
id相同和不同都存在时id相同的可以理解为一组,从上往下顺序执行,所有组中,id值越大,优先级越高越先执行。

#id相同时,执行顺序是从上往下
explain select * from t1,t2,t3 where t1.id=t2.id and t2.id = t3.id;

在这里插入图片描述

#id不同时
explain select t1.id from t1 where t1.id in
(select t2.id from t2 where t2.id in 
(select t3.id from t3 where t3.id = 1)
);

在这里插入图片描述

#id相同和id不同
explain select t2.* from t2,(select * from t3) s3 where s3.id = t2.id;

在这里插入图片描述

2.3.2 select_type

查询的类型,常见值有:
SIMPLE :简单的 select 查询,查询中不包含子查询或者UNION。

#simple 简单的select查询
explain select * from t1;

在这里插入图片描述

PRIMARY:查询中若包含任何复杂的子部分,最外层查询则被标记为Primary。

DERIVED:在FROM列表中包含的子查询被标记为DERIVED(衍生),MySQL会递归执行这些子查询, 把结果放在临时表里。

#derived  primary
explain select * from (select t1.content from t1) s1;

在这里插入图片描述

SUBQUERY: 在SELECT或WHERE列表中包含了子查询。

#subquery
explain select t2.* from t2 where t2.id = (select t3.id from t3);

在这里插入图片描述

2.3.3 table

显示这一行的数据是关于哪张表的。

2.3.4 type

访问类型排序:
在这里插入图片描述
System:表只有一行记录(等于系统表),这是const类型的特列,平时不会出现,这个也可以忽略不计。

#system
explain select * from (select t1.id from t1 where id = 1) t;

在这里插入图片描述

Const:表示通过索引一次就找到了,const用于比较primary key或者unique索引。因为只匹配一行数据,所以很快,如将主键置于where列表中,MySQL就能将该查询转换为一个常量。

#const 索引一次就找到了
explain select * from t1 where id = 1;

在这里插入图片描述

eq_ref:唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配。常见于主键或唯一索引扫描。

#eq_ref
explain select t1.*,t2.* 
from t1
join t2
on t1.id = t2.id;

在这里插入图片描述

Ref:非唯一性索引扫描,返回匹配某个单独值的所有行。本质上也是一种索引访问,它返回所有匹配某个单独值的行,然而,它可能会找到多个符合条件的行,所以他应该属于查找和扫描的混合体。

#ref非唯一索引扫描
alter table t1 add index idx_t1_content(content);
explain select * from t1 where t1.content = "abc";

在这里插入图片描述

Range:只检索给定范围的行,使用一个索引来选择行。key 列显示使用了哪个索引
一般就是在你的where语句中出现了between、<、>、in等的查询这种范围扫描索引扫描比全表扫描要好,因为它只需要开始于索引的某一点,而结束语另一点,不用扫描全部索引。

#range
explain select * from t2 where t2.id >0;

在这里插入图片描述

Index:Full Index Scan,index与ALL区别为index类型只遍历索引树。这通常比ALL快,因为索引文件通常比数据文件小。也就是说虽然all和Index都是读全表,但index是从索引中读取的,而all是从硬盘中读的。

#index
explain select id,content from t1;

在这里插入图片描述

All:Full Table Scan,将遍历全表以找到匹配的行。

#All
explain select * from t1 where t1.content = "abc";

在这里插入图片描述

从最好到最差依次是:system>const>eq_ref>ref>range>index>All一般来说,最好保证查询能达到range级别,最好能达到ref

2.3.5 possible_keys

显示可能应用在这张表中的索引,一个或多个。查询涉及到的字段上如果存在索引,则改索引将会被列出来,但不一定会被查询实际使用上。

2.3.6 key

查询中实际使用的索引,如果为NULL,则没有使用索引。

-- possible keys   key
explain select * from t2 where t2.id is not null;

在这里插入图片描述

2.3.7 ref

显示索引的哪一列被使用了。哪些列或常量被用于查找索引列上的值。

-- ref
explain select t2.*,t3.* from t2,t3 where t2.id = t3.id;

在这里插入图片描述

2.3.8 rows

rows列显示MySQL认为它执行查询时必须检查的行数。一般越少越好。

-- rows 
#删除person上的索引
drop index idx_pname on person;
alter table person add index idx_pname(PNAME);
explain select person.* from person where pname = "test3263609";

在这里插入图片描述

2.3.9 extra

例子:


drop table if exists emps;
CREATE TABLE emps (
  id INT PRIMARY KEY AUTO_INCREMENT COMMENT "主键id",
  name VARCHAR (24) COMMENT '姓名',
  age INT COMMENT '年龄',
  job VARCHAR (20) COMMENT '职位'
);
 
INSERT INTO emps(name,age,job) VALUES('zhangsan',22,'manager');
INSERT INTO emps(name,age,job) VALUES('lisi',23,'clerk');
INSERT INTO emps(name,age,job) VALUES('wangwu',24,'salsman');
INSERT INTO emps(name,age,job) VALUES('赵六',23,'salsman');

一些常见的重要的额外信息:
Using filesort:MySQL无法利用索引完成的排序操作称为“文件排序”。

-- using filesort 排序时没有使用索引
explain select * from emps order by age;

在这里插入图片描述

Using temporary:Mysql在对查询结果排序时使用临时表,常见于排序order by和分组查询group by。
在这里插入图片描述

-- using temporary 分组时没有使用索引
explain select count(*),job from emps group by job;

Using index:表示索引被用来执行索引键值的查找,避免访问了表的数据行,效率不错。

-- using index 
explain select id,name from emps;

在这里插入图片描述

Using where:表示使用了where过滤。

-- using where
explain select * from emps where name = "张三";

在这里插入图片描述

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

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

相关文章

Super Vlan理论讲解

目录 Super Vlan作用 Super Vlan类型 Super Vlan通信规则 华为Super Vlan配置 传统Vlan部署中&#xff0c;一个Vlan对应一个网段和一个Vlanif接口来实现Vlan间的通信 造成了IP地址的浪费&#xff0c;因此提出了Super Vlan技术 Super Vlan作用 Super Vlan又称为聚合&#x…

java计算机毕业设计ssm金华学校社团管理系统

项目介绍 随着计算机信息技术的迅猛发展,互联网技术大规模应用到各行各业,传统的管理系统也逐渐精细化。高校作为教书育人的场所,各种管理也更应该智能化,特别是计算机信息专业更是最早接触信息技术,为高校各部门开发必要的系统是很有意义的事情。本金华学校社团管理系统对社团…

蓝桥杯刷题(二)

蓝桥杯刷题一.空间二.排序三.成绩分析四.蛇形填数五.跑步锻炼&#xff08;较难&#xff09;一.空间 这道题很简单&#xff0c;要弄清单位间的转换和如何输出就可以啦 #include <stdio.h>int main() {printf("%.0f",256/(32/4/2/1024.0000/1024));return 0; }记…

面试必学:输入 URL到页面的全过程-----五步完成、简单明了

目录 一、应用层解析 二、传输层连接 三、服务区处理 四、浏览器处理 五、断开 一、应用层解析 进行DNS解析&#xff1a;即将域名地址解析成 IP 地址 网络设备是通过 IP地址&#xff0c;作为身份标识 但是 IP地址不好记&#xff0c;所以很多时候就用一串单词 来进行表示。…

ipv6地址概述——深入讲解ipv6地址

作者简介&#xff1a;一名在校云计算网络运维学生、每天分享网络运维的学习经验、和学习笔记。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​​ 目录 前言 一.ipv6地址深入了解 1.ipv6地址表示 ①冒号十六进制表示法&am…

计算机组成原理-中央处理器详细讲解(持续更新中)

CPU的功能和基本结构 CPU由运算器和控制器两大部分组成 CPU的功能 指令控制。完成取指令、分析指令和执行指令的操作&#xff0c;即程序的顺序控制。操作控制。一条指令的功能往往是由若干操作信号的组成来实现的。CPU管理并产生由内存取出的每条指令的操作信号&#xff0c;把…

FPGA学习笔记(八)同步/异步信号的打拍分析及处理

系列文章目录 一、FPGA学习笔记&#xff08;一&#xff09;入门背景、软件及时钟约束 二、FPGA学习笔记&#xff08;二&#xff09;Verilog语法初步学习(语法篇1) 三、FPGA学习笔记&#xff08;三&#xff09; 流水灯入门FPGA设计流程 四、FPGA学习笔记&#xff08;四&…

花十分钟用Python写了个蹭WiFi的软件,于是获取了隔壁单身妹子的WiFi试了试效果,居然发现...

Python写一个免费蹭WiFi的神器前因后果注意事项主要代码效果展示怎么学好Python&#xff1f;前因后果 昨晚十点学姐跟我发消息说她家的WiFi 不知道为什么今天就很慢&#xff0c;让我赶紧去她家帮她看看&#xff0c;当时我就怒了&#xff0c;这大晚上的我都要睡觉了还给我整这破…

Qt翻译(本地化)坑总结

文章目录坑1&#xff1a;无法生成ts文件坑2&#xff1a;ts文件的中文乱码坑3&#xff1a;不能直接翻译全局变量、静态变量、符号常量字符串官方文档 Internationalization with Qt 贴一个比较好的总结 Qt中&#xff0c;软件多语言国际化翻译的方法与步骤 坑1&#xff1a;无法生…

[Redis] Redis实战

✨✨个人主页:沫洺的主页 &#x1f4da;&#x1f4da;系列专栏: &#x1f4d6; JavaWeb专栏&#x1f4d6; JavaSE专栏 &#x1f4d6; Java基础专栏&#x1f4d6;vue3专栏 &#x1f4d6;MyBatis专栏&#x1f4d6;Spring专栏&#x1f4d6;SpringMVC专栏&#x1f4d6;SpringBoot专…

[附源码]java毕业设计实践教学管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Echarts:好玩的timeline

Echarts是一个开源的可视化图表库&#xff0c;支持丰富的图表&#xff0c;官网中还有大量示例可以选择使用、参考。 其中比较有趣的一个特性是可以把数据随时间变化而变化&#xff0c;其效果与一些视频中比较不同国家的国力随时间变化的排名变化的效果相似。 接下啦我们就实现…

linux下golang环境安装教程(学习笔记)

linux下golang环境安装教程&#xff08;学习笔记&#xff09; SSH远程登录linux服务器 安装 mercurial包 [rootlocalhost ~]# yum install mercurial 安装git包 [rootlocalhost ~]# yum install git 安装gcc【一般自带安装好了的】 [rootlocalhost ~]# yum install gcc …

黑*头条_第3章_文章详情前后端成形记

黑*头条_第3章_文章详情前后端成形记 文章目录黑*头条_第3章_文章详情前后端成形记文章详情前后端成形记1 分布式主键封装1.1 依赖导入1.2 配置文件1.3 枚举封装1.4 序列封装1.5 Client封装1.6 Config封装1.7 Sequences封装1.8 使用案例1.9 扩展自增表2 App文章详情2.1 功能需求…

Spring IOC源码:registerBeanPostProcessors 详解

前言 上篇文章介绍了后置处理器BeanFactoryPostProcessor的注册、实例化及执行操作&#xff0c;这节介绍一下另外一个后置处理器BeanPostProcessor。前者是针对BeanFactory工厂对象进行增上改查操作&#xff0c;在bean实例化之前&#xff0c;我们可以修改其定义。后者是对实例…

电脑重装系统蓝屏是什么原因

​电脑蓝屏是由于系统故障、致命的系统错误或系统崩溃而导致的现象&#xff0c;要想修复电脑蓝屏&#xff0c;关键是找出原因所在。为此&#xff0c;下面小编就给大家整理电脑蓝屏是什么原因。 原因1、虚拟内存不足造成系统多任务运算错误&#xff1a; 虚拟内存是Windows系统所…

(免费分享)基于springboot健康运动-带论文

源码获取&#xff1a;关注文末gongzhonghao&#xff0c;输入013领取下载链接 ​开发工具&#xff1a;IDEA, mysql5.7 技术&#xff1a;springbootmybatis-plus 健康管理包括&#xff1a;健康体检、健康评估、健康促进和健康服务四大部分。具体来说健康管理就是由健康管理顾问…

13.4 GAS与攻击

目录1. 由GA砍出的第一刀2. 挥剑时的命中检测3. 完善&#xff1a;UI显示当前血量参考&#xff1a;1. 由GA砍出的第一刀 有了前面章节的经验&#xff0c;我们可以很容易创建一个专用于攻击的GA&#xff1a; 其中PlayMontageAndWait任务节点负责攻击动画及相应回调的绑定。 但是…

向毕业妥协系列之深度学习笔记(二)深层神经网络

目录 一.深层神经网络 二.前向和反向传播 三.深层网络中的前向传播 四.核对矩阵的维数 五.为什么使用深层表示 六.参数VS超参数 一.深层神经网络 就是好多层。 二.前向和反向传播 三.深层网络中的前向传播 四.核对矩阵的维数 略 五.为什么使用深层表示 我们都知道深度…

在淘宝开店后,如何发布宝贝?从哪发布?

近期&#xff0c;有几位在淘宝新开店的店主&#xff0c;来向我们咨询了一些问题&#xff0c;总结来说可以将问题归为一个&#xff1a;在淘宝开店后&#xff0c;怎样上传宝贝&#xff1f;从哪上传&#xff1f;下面&#xff0c;小编来给大家简单的说一下发布宝贝时要注意什么&…