2个百万行级表,在本地,根据一个表对另一表作update set,select,频繁报 Lost connection to MySQL server during query

zerov 发布于 2017/06/25 13:31
阅读 293
收藏 0

环境:mac os10.12 ,intel 2.7G CPU,mysql 5.7,navicat for mysql 11.2,且mysql 作了相关优化,如下图(均在本机使用,小本内存16G):

 

1、需求:

     两表(a/b表)字段均为:id/name/age,因a表数据正确 ,但b表name、age等数据与a表相比,有缺失,但2表id均是一样的,未作外键操作,也未作索引,在a表100行,b表300万行。

  现在想让b表的name/age与a表保持一致,所以根据id来update实现:

方法一:update a,b set a.name=b.name on a.id=b.id;

方法二:update a SET t1.`name`= t2.name from a as t1 inner JOIN b as t2ON t1.ID =t2.ID;(换left join 或 right join均结果一样)

最后没办法,就用select看看:

SELECT a.ID,a.name,b.ID,b.name FROM a left JOIN  b on a.ID=b.ID;

照样报“Lost connection"错误!

后想对ab表作索引,也报同样错误。

2、优化:

按网络上各种方法对my.cnf作了优化,如下图:

3、在mysql终端上操作,等半小时后,电脑没在运行,也不报错,更没结果。

 

求教各位大神,有何办法,update百万级大表。相信不是mysql的问题,而是哪儿没掌握好方法。

 

 

加载中
0
Cherry夏天
Cherry夏天
php.循环来更新
zerov
zerov
只在本地数据库里操作,不想弄得更复杂
0
0
泡面和尚
泡面和尚
sql都有问题
zerov
zerov
能否指出哪儿有问题?
0
士别三日
士别三日

连接问题吧

0
N
Nitron

UPDATE a, b set a.name = b.name where a.id = b.id

N
Nitron
回复 @zerov : 你那两个SQL都是错的啊
zerov
zerov
这个是我用的第一个方法,照旧报错误
0
耒耒耒耒耒
耒耒耒耒耒

两个sql都是错的诶大哥。命令行不行就用可视化工具吧。navicat什么之类的。

UPDATE a t1
INNER JOIN bt2 ON t1.ID = t2.id
SET t1. name= t2.name

耒耒耒耒耒
耒耒耒耒耒
你只更新一条试试。指定id。如果能成功的话。就是说明处理的数据太多了。然后就考虑分批处理。如果还是错误的话。就是mysql的问题了。
zerov
zerov
还是报错,见下图。 我怀疑Mac 的 mysql坏了,因为原来我统计一个600百万行的表是没问题的,现在也报 Lost connection错误
0
zerov
zerov

熟悉的错误,不一样的方法

返回顶部
顶部