mysql中sleep函数的时间为什么效果是翻倍的
mysql> select * from ff;
+------+
| id |
+------+
| 12 |
| 13 |
+------+
2 rows in set (0.00 sec)
mysql> select sleep(1),id from ff;
+----------+------+
| sleep(1) | id |
+----------+------+
| 0 | 12 |
| 0 | 13 |
+----------+------+
2 rows in set (2.00 sec)
mysql> select sleep(2),id from ff;
+----------+------+
| sleep(2) | id |
+----------+------+
| 0 | 12 |
| 0 | 13 |
+----------+------+
2 rows in set (4.00 sec)
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在MySQL中,SLEEP()
函数的作用是让当前线程暂停指定的秒数。当你在查询中使用SLEEP()
函数时,它会为查询结果集中的每一行执行一次。因此,如果你从一个表中选择多行,并且在SELECT语句中包含了SLEEP()
函数,那么总的延迟时间将是SLEEP()
参数值乘以行数。
在你的例子中:
当你执行 SELECT sleep(1), id FROM ff;
时,表ff
有2行,所以对于每一行,MySQL都会暂停1秒,总共暂停2秒,这就是为什么查询用了2秒而不是1秒。
同理,当你执行 SELECT sleep(2), id FROM ff;
时,每行暂停2秒,共两行,所以总暂停时间是4秒。
总结来说,SLEEP()
函数在多行查询中的效果看起来像是“翻倍”,实际上是它的参数值与结果集行数相乘的结果。如果你想让整个查询只暂停指定秒数,而不是每行都暂停,那么你需要在应用层面或者使用其他逻辑来控制这个行为,而不是直接在SQL查询中使用SLEEP()
函数。