进阶-索引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 优化排序和过滤
相关推荐
神仙别闹1 小时前
基于 C++ 实现(控制台)学生成绩管理系统
开发语言·c++
伞伞悦读1 小时前
【第36期】Python 目录与路径详解:pathlib、文件遍历、创建、复制、移动和删除风险
开发语言·python
Hrain-AI2 小时前
多 Agent 并行不打架:worktree 隔离与反馈回流落地(附脚本)
网络·数据库·人工智能·架构
净水深流3 小时前
中央厨房冷链技术实践:多温区改造、WMS落地与IoT温控架构
大数据·数据库·人工智能·冷库冷链
l1t3 小时前
测试DuckDB 2.1的match_recognize模式匹配语句
数据库·duckdb
智者知已应修善业3 小时前
【4060BD_5V应用电路图】2022-12-24
驱动开发·经验分享·笔记·硬件架构·硬件工程
IpdataCloud4 小时前
AI智能体调用工具怎么核验来源IP?归属地、网络类型与代理风险识别(含Python代码)
数据库·python·tcp/ip
曹牧4 小时前
Java:SQL 注入漏洞
数据库
2601_966949654 小时前
只拿到股票代码还不够:量化程序到底还需要哪些标的信息?——从数据建模开始理解股票元数据
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
m0_734571764 小时前
深入理解5g <十八>传输块tbsize的计算
开发语言·5g