sql执行有时候快有时候慢_mysql:show profile分析一个SQL执行慢的具体原因

在做数据库优化的过程中可以通过explain来查看查询有没有走索引,但是

mysql从5.0.37版本开始增加了对show profiles和show profile 语句的支持,通过

have_profiling参数,能够看到当前mysql是否支持profile;

mysql> select @@have_profiling;

+-------------------------------+

|@@have_profiling |

+-------------------------------+

| YES |

+-------------------------------+

1 row in set (0.00 sec)

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

mysql> select @@profiling;

+-------------------------------+

| @@profiling |

+-------------------------------+

| 0 |

+------------------------------+

1 row in set (0.00 sec)

mysql> set profiling=1;

query ok ,0 rows affected(0.00 sec)

通过 profile,我们能够更清楚地了解sql执行的过程,例如,我们知道myisam表有表元数据的缓

存(例如行数,即count(*)值),那么对一个myisam表的count(*)是不需要消耗太多资源的,而对于

innodb来说,就没有这种元数据缓存,count(*) 执行地较慢,下面做个实验验证一下。

首先,在一个innodb引擎的付款表payment上,执行一个count(*)查询:

mysql> select count(*) from payment;

+------------------------------+

| count(*) |

+------------------------------+

| 16049 |

+------------------------------+

1 row in set (0.00 sec)

执行完毕后,通过show profiles语句,看到当前sql的queryID为4:

mysql>show profiles;

b4851cfd24d6a5d65da91990a27f8ddc.png

通过 show profile for query语句能够看到执行过程中线程的每个状态和消耗的时间:

349a5185436ae11c7e39150ca7d70c03.png

show profile cpu for query 4;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值