Mysql查询,有效地将列迁移到外键

Mysql查询,有效地将列迁移到外键,mysql,Mysql,我正在尝试将大量重复的文本字符串从一个表分离到另一个表中,以便转换为外键系统 提取唯一文本并插入到新表中很容易,但我尝试了以下更新/子查询,用新的外键值更新原始表。在2200万行上,花费的时间比我想象的要长 有什么办法能让这更有效吗?我怀疑做子查询是一个好的解决方案。原始表中有一个playercol,其中包含播放器名称字符串。我已将所有唯一值转储到一个单独的表中,并希望使用新ID更新原始表 UPDATE prism_actions SET player_id = (SELECT prism_pl

我正在尝试将大量重复的文本字符串从一个表分离到另一个表中,以便转换为外键系统

提取唯一文本并插入到新表中很容易,但我尝试了以下更新/子查询,用新的外键值更新原始表。在2200万行上,花费的时间比我想象的要长

有什么办法能让这更有效吗?我怀疑做子查询是一个好的解决方案。原始表中有一个
player
col,其中包含播放器名称字符串。我已将所有唯一值转储到一个单独的表中,并希望使用新ID更新原始表

UPDATE prism_actions SET player_id = (SELECT prism_players.id FROM prism_players WHERE prism_players.player = prism_actions.player);
Query OK, 22018608 rows affected (2 hours 21 min 58.97 sec)
几年前我就用过一个例子来做这件事,但在我的生活中,我所寻找的一切都与我正在尝试做的事情无关。谷歌无法理解我的意思,我想不出更多的方法来提问。

一个简单的:

更新prism_动作a,prism_玩家p设置a.player_id=p.player_id,其中a.player=p.player


我不知道要快多少,但它会消除子查询

对于2200万排,我认为时机还可以。还请注意,如果您使用的是myisam,则在更新时它会锁定表或引擎。这可能是一个瓶颈。看起来速度不太快,但肯定更干净。谢谢