关于MySQL的SLEEP(N)函数

本文介绍了如何利用MySQL中的sleep()函数使SQL语句暂停执行指定时间,以便于观察进程列表中的快速执行语句。文章详细解释了sleep()函数的工作原理,并通过实例展示了其在不同查询条件下的行为。

都知道通过在MySQL中执行select sleep(N)可以让此语句运行N秒钟:

?
1
2
3
4
5
6
7
mysql> select sleep(1);
+ ----------+
| sleep(1) |
+ ----------+
|        0 |
+ ----------+
1 row in set (1.00 sec)

返回给客户端的执行时间显示出等待了1秒钟

借助于sleep(N)这个函数我们可以在MySQL Server的PROCESSLIST中捕获到执行迅速不易被查看到的语句以确定我们的程序是否确实在Server端发起了该语句。比如我们在调试时想确 定一下程序是否确确实实向Server发起了执行SQL语句的请求,那么我们可以通过执行show processlist或者由information_schema.processlist表来查看语句是否出现。但往往语句执行速度可能非常快,这样 的话就很难通过上述办法确定语句是否真正被执行了。例如下面语句的执行时间为0.00秒,线程信息一闪而过,根本无从察觉。

?
1
2
3
4
5
6
7
mysql> select name from animals where name = 'tiger' ;
+ -------+
| name  |
+ -------+
| tiger |
+ -------+
1 row in set (0.00 sec)

在这种情况下,可以通过在语句中添加一个sleep(N)函数,强制让语句停留N秒钟,来查看后台线程,例如:

?
1
2
3
4
5
6
7
mysql> select sleep(1), name from animals where name = 'tiger' ;
+ ----------+-------+
| sleep(1) | name  |
+ ----------+-------+
|        0 | tiger |
+ ----------+-------+
1 row in set (1.00 sec)

同样的条件该语句返回的执行时间为1.0秒。

但是使用这个办法是有前提条件的,也只指定条件的记录存在时才会停止指定的秒数,例如查询条件为name='pig',结果表明记录不存在,执行时间为0

?
1
2
mysql> select name from animals where name = 'pig' ;
Empty set (0.00 sec)

在这样一种条件下,即使添加了sleep(N)这个函数,语句的执行还是会一闪而过,例如:

?
1
2
mysql> select sleep(1), name from animals where name = 'pig' ;
Empty set (0.00 sec)

另外需要注意的是,添加sleep(N)这个函数后,语句的执行具体会停留多长时间取决于满足条件的记录数,MySQL会对每条满足条件的记录停留N秒钟。
例如,name like '%ger'的记录有三条

?
1
2
3
4
5
6
7
8
9
mysql> select name from animals where name like '%ger' ;
+ -------+
| name  |
+ -------+
| ger   |
| iger  |
| tiger |
+ -------+
3 rows in set (0.00 sec)

那么针对该语句添加了sleep(1)这个函数后语句总的执行时间为3.01秒,可得出,MySQL对每条满足条件的记录停留了1秒中。

?

 

1
2
3
4
5
6
7
8
9
mysql> select sleep(1), name from animals where name like '%ger' ;
+ ----------+-------+
| sleep(1) | name  |
+ ----------+-------+
|        0 | ger   |
|        0 | iger  |
|        0 | tiger |
+ ----------+-------+
3 rows in set (3.01 sec)

 

原文:http://www.2cto.com/database/201412/365580.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值