一、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 | 优化排序和过滤 |