mysql版本:5.7.14
情况描述:
指标表层次用路径(paths)表示,要得具体指标的层次,建立临时表,保存一指标每层指标的名称,然后更新指标层次表。
目前,小数据量时更新是可以的,但数据量大,就会出现问题,显示为空,但每行长度还不同,就是显示为空白。
源表数据量为85万行左右,指标共9层。现象如下:SELECT paths,Layer6,CHAR_LENGTH(layer6),LENGTH(Layer6)
FROM mii_industryeconomy
WHERE layer6 is not NULL
LIMIT 200;更新语句为:UPDATE mii_industryeconomy a
JOIN mii_tempindictor b ON a.`Code`=b.`Code`
SET Layer6=b.LevelName
WHERE iLEVEL=6 ;
受影响的行: 76602
时间: 22.138s加一个条件后,能正常更新。
UPDATE mii_industryeconomy a
JOIN mii_tempindictor b ON a.`Code`=b.`Code`
SET Layer6=b.LevelName
WHERE iLEVEL=6 AND b.`CODE`='00020001001400010004000100010001';
此时的结果如下:
情况描述:
指标表层次用路径(paths)表示,要得具体指标的层次,建立临时表,保存一指标每层指标的名称,然后更新指标层次表。
目前,小数据量时更新是可以的,但数据量大,就会出现问题,显示为空,但每行长度还不同,就是显示为空白。
源表数据量为85万行左右,指标共9层。现象如下:SELECT paths,Layer6,CHAR_LENGTH(layer6),LENGTH(Layer6)
FROM mii_industryeconomy
WHERE layer6 is not NULL
LIMIT 200;更新语句为:UPDATE mii_industryeconomy a
JOIN mii_tempindictor b ON a.`Code`=b.`Code`
SET Layer6=b.LevelName
WHERE iLEVEL=6 ;
受影响的行: 76602
时间: 22.138s加一个条件后,能正常更新。
UPDATE mii_industryeconomy a
JOIN mii_tempindictor b ON a.`Code`=b.`Code`
SET Layer6=b.LevelName
WHERE iLEVEL=6 AND b.`CODE`='00020001001400010004000100010001';
此时的结果如下:
主要问题是,如果数据量小,是可以的,数据量超过3万,貌似就不行了。
但是你的update语句看上去很简单,就是关联表,然后用另一个表的数据来更新主表的数据,而且code是唯一的,查询速度也会很快。
数据提供方说mysql在Windows下效率不好,建议系统 改为linux,是Windows下Mysql真的不好用吗?
用临时表去和mii_tempindictor b 做 join
最后再更新mii_industryeconomy