[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

浙公网安备 33010602011771号