进阶-索引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 优化排序和过滤
相关推荐
来了就未晚4 小时前
Python基础 学习代码存储与命名规范
开发语言·python·学习
夜雪一千4 小时前
MySQL 各种数据同步方案全梳理:从简单复制到异构同步实战
数据库·mysql
呆萌很4 小时前
英语 1‑12 月单词联想记忆
笔记
布莱克6054 小时前
数组详解:定义、作用、应用场景及与链表的区别(C/C++ 代码讲解)
c语言·开发语言·c++·数组
ruleslol4 小时前
MySQL: OR查询为什么会导致索引失效
mysql
hongmai6668884 小时前
MP2348GTL-Z:这颗24V/4A同步降压芯片,把性能和体积平衡得恰到好处
c语言·开发语言·arm开发·单片机·5g
多弗朗皮卡丘4 小时前
C语言梦开始的地方19:文件操作
c语言·开发语言
Dovis(誓平步青云)4 小时前
折叠屏悬停看视频,上半屏和下半屏应该各做什么
android·java·服务器·开发语言·安全·音视频
benchmark_cc5 小时前
Python量化实战:如何检测并剔除历史数据中的“闪崩/乌龙指”异常价格点?
开发语言·人工智能·python·量化·quantdash·量化数据源
2501_937860945 小时前
Java多线程初阶(下)—— synchronized、volatile、wait/notify与经典并发工具
java·开发语言·jvm