Есть много проблем с той же темой, что и у меня, но мой контент и проблема, кажется, разные. На своем рабочем месте я запускаю код
'select(msgid) from 'table'.log where
id = 'example' and status = 'active' and month(created_at) = 12
and year(created_at) = 2018 limit 0,10;'
Приведенный выше код работает нормально, но когда я запускаю код б
'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. Потеря соединения с сервером MySQL во время запроса 30.002 сек.
Почему это может происходить на моем рабочем месте?
PS: плохо знаком с верстаком и mysql
Вы можете изменить время ожидания с:
Правка → Настройки → Редактор SQL → Время ожидания соединения с СУБД (в секундах): 600
Изменил его на большее значение, чем ваше текущее.
** ОБНОВЛЕНИЕ вы можете установить тайм-аут чтения также:
SET @@local.net_read_timeout=360;
query editor
object editor
, "выполнение sql"
Вот скриншот настроек из MySQL Workbench 8.0.13. Я поместил стрелки, указывающие, где вы должны выбрать "Редактор SQL", а затем - поле "Интервал ожидания чтения соединения с СУБД".
Я согласен с комментарием @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);
Вы должны попытаться увеличить время чтения соединения с СУБД.
Перейдите в Workbench Edit → Preferences → SQL Editor → Время ожидания соединений с СУБД: увеличьте это до 6000
query editor
object editor
, "выполнение sql"