[mysql]SQL性能分析
查询各类命令执行频次#
#7个下划线
show global status like 'Com_______';
慢查询#
查看慢查询是否开启#
show variables like 'slow_query_log';
开启慢查询日志#
修改my.cnf配置文件,添加以下配置:
# 开启mysql慢查询日志开关
slow_query_log=1
# 慢查询时间为2s, sql执行时间超过2s则视为慢查询,记录慢查询日志
long_query_time=2
重启服务
systemctl restart mariadb
查看慢查询日志#
cat /var/lib/mysql/localhost-slow.log
profile#
查看当前MYSQL是否支持profile操作#
select @@have_profiling;
查看profiling是否开启#
select @@profiling;
开启profiling#
默认profiling是关闭的,可以通过set语句在session/global级别开启profiling
set profiling = 1;
查看profiles#
#查看每一条sql的耗时基本情况
show profiles;
#查看指定query_id的sql语句在各个阶段的耗时情况
show profile [cpu] for query QUERY_ID;
explain执行计划#
操作#
#直接在任意sql语句之前添加EXPLAIN关键字
EXPLAIN select * from test_innodb;
各字段含义#
- ID
select查询的序列号,表示查询中执行select子句或者是操作表的顺序(id相同,执行顺序从上到下;id不同,值越大,越先执行) - SELECT_TYPE
表示 SELECT 的类型,常见取值有 SIMPLE(简单表,即不适用表连接或者子查询)、PRIMARY(主查询,即外层的查询)、UNION(UNION中的第二个或者后面的查询语句)、SUBQUERY(SELECT/WHERE之后包含了子查询)等 - table
对应的表 - type
表示连接类型,性能由好到差的连接类型为 NULL、system、const、eq_ref、ref、range、index、all - possible_keys
可能应用在这张表上的索引,一个或多个 - key
实际使用的索引,如果为 NULL,则没有使用索引 - key_len
表示索引中使用的字节数,该值为索引字段最大可能长度,并非实际使用长度,在不损失精确性的前提下,长度越短越好 - ref
- rows
行数 - Extra
作者:javanoob0660
出处:https://www.cnblogs.com/javanoob0660/articles/16440971.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通