[mysql]SQL性能分析

查询各类命令执行频次#

#7个下划线
show global status like 'Com_______';

image

慢查询#

查看慢查询是否开启#

show variables like 'slow_query_log';

image

开启慢查询日志#

修改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;

image

查看profiling是否开启#

select @@profiling;

image

开启profiling#

默认profiling是关闭的,可以通过set语句在session/global级别开启profiling

set profiling = 1;

查看profiles#

#查看每一条sql的耗时基本情况
show profiles;

#查看指定query_id的sql语句在各个阶段的耗时情况
show profile [cpu] for query QUERY_ID;

image

image

explain执行计划#

操作#

#直接在任意sql语句之前添加EXPLAIN关键字
EXPLAIN select * from test_innodb;

image

各字段含义#

  • 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 国际」许可协议进行许可。

posted @   丘丘CRUD  阅读(72)  评论(0编辑  收藏  举报
编辑推荐:
· 基于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最大的设计失误
· 单元测试从入门到精通
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示