Loading

[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
posted @ 2022-07-03 21:19  丘丘CRUD  阅读(82)  评论(0)    收藏  举报