与我的主题相同的问题很多,但我的内容和问题似乎有所不同。在工作台中,运行代码
`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的新手
答案 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连接读取超时间隔”字段。
我同意@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);