进阶-索引3-性能分析

一、MySQL进阶

1. 索引

1.1 性能分析

1. 查看执行频次

原理:通过监控数据库的高频操作类型,识别系统负载模式,为索引优化提供数据支撑。

这四项指标分别代表了数据库它的插入、查询、更新和删除次数分别是多少。通过这条指令当前数据库到底是是以什么操作(比如:查询)为主,那么此时我们就可以根据这个来进行相应的优化。

2. 慢查询日志

原理:记录执行时间超过阈值的SQL语句,帮助定位系统中的"性能黑洞"。

我们已经确定了当前数据库当中这个sql语句的执行频次什么操作占用了大部分,那么此时我们要针对当前数据库来进行优化,那么我们应该针对于当前数据库的哪些sql语句来优化呢?此时就需要借助于慢查询日志来定位sql语句。

使用虚拟机Ubuntu配置文件:

首先创建一个右键点击创建新的终端窗口之后,在新的终端窗口界面中

使用vi指令打开配置文件设置慢查询日志文件的开关以及设置参数的时间;

输入'i'或者键盘按下insert键位,进入插入模式,在文件的最后输入下面的三行指令;

按下'esc'返回,加上:wq或者直接:wq 保存并退出。重启mysqld服务器

点击mysql服务器内部的终端指令窗口,重新输入指令,现在的开关就是打开的慢查询日志了

慢查询日志的文件生成了是存放在该路径之下的,可以通过cd + 文件路径名的方式打开查看

如下的文件:

通过cat可以查看里面的文件内容,里面包含一些基本的信息:当前数据库的版本8.0.26,当前数据库的端口3306等。

通过该指令可以查看慢日志文件尾部实时输出的内容,只要该文件里面有新的内容追加上来,我们在该终端窗口的文件内部马上就可以显示出来:

在mysql里面执行一条执行量极大的sql语句,这差不多是执行了1000w条的插入语句,一共耗时13s,远远超过我们设定了2s。

此时慢查询日志文件内部记录当前的信息,记录你是通过哪一个用户root 在哪一个主机上localhost链接上来的,以及你当前耗时多长13.350650、返回了多少条记录、以及你用的哪一个数据库、当前操作的时间、执行的sql语句都会被日志记录下来

有了这个慢查询日志,我们就直到哪一条的sql语句执行效率比较低,针对哪一个sql语句进行合理的优化。

3. profile详情

原理:提供SQL执行各阶段的详细耗时,定位具体瓶颈点。

sql 复制代码
-- 检查是否支持Profile
SELECT @have_profiling;

-- 开启Profile
SET profiling = 1;

-- 执行目标SQL
SELECT * FROM orders WHERE user_id = 12345 AND order_date >= '2023-01-01' ORDER BY order_date DESC;

-- 查看执行概览
SHOW PROFILES;

-- 查看具体阶段耗时(假设query_id为12)
SHOW PROFILE FOR QUERY 12;

查看每一条sql语句的耗时情况的指令

查看指定 的query_id的sql语句在各个阶段的耗时指令

加上cpu也可以看见cpu的耗费情况

4. explain执行计划

原理:通过分析MySQL如何执行查询,判断索引是否被正确使用。

这么多的信息,每一个字段代表的意思是:

关键字段解析

字段 重要性 常见值 优化建议
type ★★★★★ ALL → index → range → ref → const 避免ALL(全表扫描)
key ★★★★★ 索引名 为空表示未使用索引
key_len ★★★★☆ 索引长度 检查是否使用了预期索引
rows ★★★★☆ 估算行数 越小越好
Extra ★★★★☆ Using where, Using index, Using filesort 优化排序和过滤
相关推荐
百结2142 小时前
Mysql数据库操作
数据库·mysql·oracle
keep one's resolveY2 小时前
时区问题解决
数据库
似水明俊德3 小时前
02-C#.Net-反射-面试题
开发语言·面试·职场和发展·c#·.net
Leinwin3 小时前
OpenClaw 多 Agent 协作框架的并发限制与企业化规避方案痛点直击
java·运维·数据库
qq_417695053 小时前
机器学习与人工智能
jvm·数据库·python
漫随流水3 小时前
旅游推荐系统(view.py)
前端·数据库·python·旅游
ego.iblacat3 小时前
MySQL 服务基础
数据库·mysql
Thera7773 小时前
C++ 高性能时间轮定时器:从单例设计到 Linux timerfd 深度优化
linux·开发语言·c++
炘爚4 小时前
C语言(文件操作)
c语言·开发语言
阿蒙Amon4 小时前
C#常用类库-详解SerialPort
开发语言·c#