大数据查询期间与MySQL服务器的连接断开

时间:2019-05-14 10:20:26

标签: mysql

在我的mysql数据库中,我具有Orderhead和Orderline表以及其他表。订单头包含37700,订单行包含965093行。 我查询订单的查询如下

SELECT * FROM Orderline 
INNER JOIN 
(
  SELECT UUID FROM Orderhead WHERE 1 AND Orderhead.InsertTime >= '0001-01-01 00:00:00' AND Employee = 'TK' AND TYPE NOT IN ('WebShop')
) AS `Orderhead` ON `Orderline`.`OrderUUID` = `Orderhead`.`UUID` ORDER BY Orderline.Number

查询返回19962行。但是很奇怪,它从应用程序中抛出错误“查询期间与MySQL服务器的连接丢失”。在查询窗口(SQLyog) 当我有时需要45秒,5秒(尽管我尝试了SQL_NO_CACHE,RESET QUERY CACHE,FLUSH QUERY CACHE而不考虑缓存)运行查询时。 我不确定使用IN或EXISTS关键字能获得多少性能优势。

In---

SELECT  * FROM Orderline 
WHERE `Orderline`.`OrderUUID` IN 
(
  SELECT UUID FROM Orderhead WHERE 1 AND Orderhead.InsertTime >= '0001-01-01 00:00:00' AND Employee = 'TK' AND TYPE NOT IN ('WebShop')
) ORDER BY Orderline.Number

Exists---

SELECT * FROM Orderline 
WHERE EXISTS
(
  SELECT UUID FROM Orderhead WHERE 1 AND Orderhead.InsertTime >= '0001-01-01 00:00:00' AND Employee = 'TK' AND TYPE NOT IN ('WebShop') 
  AND `Orderline`.`OrderUUID` = `Orderhead`.`UUID`
) ORDER BY Orderline.Number

我还增加了net_read_timeout,connect_timeout,max_allowed_pa​​cket,因为链接表示https://dev.mysql.com/doc/refman/5.7/en/error-lost-connection.html, 但是没有运气。我是从SQLyog查询窗口运行的。设置了新的增量值。但是没有运气。我是否需要重新启动服务器才能生效?

在“加入,存在与存在”中哪个是最好的?如何添加索引(在哪些字段上)以获得最佳优化? 如何在不考虑缓存的情况下运行查询?

0 个答案:

没有答案