mysql sql执行慢 分析过程

为了验证select 1 与 select 1 from tableName 与 select * from tableName的执行效率,须要测试一下各自执行的时间。因而总结一下,查看mysql语句运行时间的方法。mysql

方法一: show profiles。sql

1. Show profiles是5.0.37以后添加的,要想使用此功能,要确保版本在5.0.37以后。数据库

     Query Profiler是MYSQL自带的一种query诊断分析工具,经过它能够分析出一条SQL语句的性能瓶颈在什么地方。一般咱们是使用的explain,以及slow query log都没法作到精确分析,工具

     可是Query Profiler却能够定位出一条SQL语句执行的各类资源消耗状况,好比CPU,IO等,以及该SQL执行所耗费的时间等。性能

     查看数据库版本方法:show variables like "%version%";  或者  select version();测试

    

2.肯定支持show profile 后,查看profile是否开启,数据库默认是不开启的。变量profiling是用户变量,每次都得从新启用。spa

   查看方法: show variables like "%pro%";命令行

   设置开启方法: set profiling = 1;资源

   

   再次查看show variables like "%pro%"; 已是开启的状态了。it

3.能够开始执行一些想要分析的sql语句了,执行完后,show profiles;便可查看全部sql的总的执行时间。

  

  show profile for query 1 便可查看第1个sql语句的执行的各个操做的耗时详情。

  

 show profile cpu, block io, memory,swaps,context switches,source for query 6;能够查看出一条SQL语句执行的各类资源消耗状况,好比CPU,IO等

 show profile all for query 6 查看第6条语句的全部的执行信息。

 测试完毕后,关闭参数:

mysql> set profiling=0

方法二: timestampdiff来查看执行时间。

这种方法有一点要注意,就是三条sql语句要尽可能连一块儿执行,否则偏差太大,根本不许

set @d=now();
select * from comment;
select timestampdiff(second,@d,now());

若是是用命令行来执行的话,有一点要注意,就是在select timestampdiff(second,@d,now());后面,必定要多copy一个空行,否则最后一个sql要你本身按回车执行,这样就不许了。