20.进阶-索引-性能分析-show profiles
我们通过Mysql的慢查询日志就可以定位出哪些sql的执行耗时比较长,从而对这类sql进行优化。但是慢查询日志中他所记录的sql是执行耗时超过了我们预设指定时间之后才会记录。比如预设的指定时间是2s,超过2s他才会记录在慢查询日志中,假如说有一些sql语句他的执行耗时比如为1.8s,1.9s,1.95s等,这类sql是不会记录在慢查询日志中的。假如说我们业务系统中,有一些sql语句,它的业务很简单,但是他的执行达到了1.9几秒,这类的sql实际上相对来说性能也是比较低的,我们也需要对这类sql进行优化。怎么定位到这类sql呢?慢查询日志满足不了,可以借助另外一种手段叫做profiles详情。
(1)profiles详情
show profiles
能够在做SQL优化时帮助我们了解时间都耗费到哪里去了。通过have_profiling参数,能够看到当前MySQL是否支持profile操作:
SELECT @@have_profiling ;
可以看到,当前MySQL是支持 profile操作的,但是开关默认是关闭的。可以通过set语句在session/global级别开启profiling:
select @@profiling; #查询是否开启了profiling开关
SET profiling = 1; #开启profiling开关
开关已经打开了,接下来,我们所执行的SQL语句,都会被MySQL记录,并记录执行时间消耗到哪儿去 了。 我们直接执行如下的SQL语句:
select * from tb_user;
select * from tb_user where id = 1;
select * from tb_user where name = '白起';
select count(*) from tb_sku;
执行一系列的业务SQL的操作,然后通过如下指令查看指令的执行耗时:
-- 查看每一条SQL的耗时基本情况
show profiles;
-- 查看指定query_id的SQL语句各个阶段的耗时情况
show profile for query query_id;
-- 查看指定query_id的SQL语句CPU的使用情况
show profile cpu for query query_id;
查看每一条SQL的耗时情况:
查看指定SQL各个阶段的耗时情况 :
WzsJEg06-1720228386499)]
查看指定SQL各个阶段的耗时情况 :