进阶-索引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 优化排序和过滤
相关推荐
落羽凉笙5 小时前
Python学习笔记(3)|数据类型、变量与运算符:夯实基础,从入门到避坑(附图解+代码)
笔记·python·学习
哈里谢顿5 小时前
MySQL 索引失效的 12 宗罪:一条 SQL 是怎样把索引踢出执行计划的?
mysql
ytttr8735 小时前
隐马尔可夫模型(HMM)MATLAB实现范例
开发语言·算法·matlab
天远Date Lab5 小时前
Python实战:对接天远数据手机号码归属地API,实现精准用户分群与本地化运营
大数据·开发语言·python
@淡 定5 小时前
Redis热点Key独立集群实现方案
数据库·redis·缓存
listhi5205 小时前
基于Gabor纹理特征与K-means聚类的图像分割(Matlab实现)
开发语言·matlab
laocooon5238578866 小时前
mysql,100个题目。
数据库·sql·mysql
qq_433776426 小时前
【无标题】
开发语言·php
Web极客码6 小时前
如何在Ubuntu服务器上安装和配置BIND9
服务器·数据库·ubuntu
W001hhh6 小时前
数据库实训Day004上午
数据库