![](/img/trans.png)
[英]PDO Query Error: 2013 Lost connection to MySQL server during query [Need Optimization Help]
[英]Error Code: 2013. Lost connection to MySQL server during query 30.002 sec
與我的主題有很多相同的問題,但是我的內容和問題似乎有所不同。 在工作台中,我運行代碼
`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的新手
這是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);
您應該嘗試增加DBMS連接的讀取超時。
轉到工作台編輯→首選項→SQL編輯器→DBMS連接讀取超時:將其增加到6000
您可以從更改超時:
編輯→首選項→SQL編輯器→DBMS連接讀取超時(以秒為單位):600
將其更改為比當前值更大的值。
**更新您還可以通過以下方式設置讀取超時:
SET @@local.net_read_timeout=360;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.