错误代码:2013。查询30.002秒期间与MySQL服务器的连接断开

时间:2019-01-02 18:02:04

标签: php mysql mysql-workbench

与我的主题相同的问题很多,但我的内容和问题似乎有所不同。在工作台中,运行代码

`select(msgid) from `table`.log where 
 id = 'example'  and  status = 'active'  and month(created_at) = 12 
 and year(created_at) = 2018 limit 0,10;`

上面的代码工作正常,但是当我运行代码b

`select(msgid), count(msgid) from `table`.log where 
     id = 'example'  and  status = 'active'  and month(created_at) = 12 
     and year(created_at) = 2018 limit 0,10;`

我得到了错误

  

>   错误代码:2013。查询30.002秒期间与MySQL服务器的连接丢失

为什么这会在我的工作台中发生?

PS:工作台和mysql的新手

3 个答案:

答案 0 :(得分:0)

您应该尝试增加DBMS连接的读取超时。

转到Workbench编辑→首选项→SQL编辑器→DBMS连接读取超时:将其增加到6000

答案 1 :(得分:0)

您可以从更改超时:

编辑→首选项→SQL编辑器→DBMS连接读取超时(以秒为单位):600

将其更改为比当前值更大的值。

**更新 您还可以通过以下方式设置读取超时:

SET @@local.net_read_timeout=360;

答案 2 :(得分:0)

这是MySQL Workbench 8.0.13中的首选项的屏幕截图。我已经放置了箭头,指示应该在哪里选择“ SQL编辑器”,然后在哪里找到“ DBMS连接读取超时间隔”字段。

enter image description here

我同意@SalmanA的评论,您应该优化查询,这样才不会太慢。

尤其是,您应该使用索引来帮助查询缩小要报告的行。但是,当您使用month(created_at)year(created_at)之类的函数时,您将无法做到这一点。假设您在created_at上有一个索引,则需要将该列本身放在比较运算符的左侧:

... AND created_at >= '2018-12-01' AND created_at < '2019-01-01'

此查询的最佳索引是复合索引:

ALTER TABLE log ADD INDEX (id, status, created_at, msg_id);