2013-03-01 64 views
0

我试图将大量重复的文本字符串从一个表中分离到另一个表中,以便将其转换为外键系统。Mysql查询有效地将列迁移到外键

拉动独特的文本并插入新表很容易,但我尝试了下面的更新/子查询来使用新的外键值更新原始表。在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) 

我用了一个例子,几年前要做到这一点,但对于生活我来说,没有我搜索给我任何远程涉及到我想要做的事。谷歌无法弄清楚我的意思,我想不出有什么办法可以问。

+0

对于22M行我认为时间不错。还要介意,如果您使用的是myisam,则会在更新时锁定表或引擎。这可能是瓶颈。 – 2013-03-01 20:47:24

回答

0

什么简单:

UPDATE prism_actions一个,prism_players p将a.player_id = p.player_id其中a.player = p.player;

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

+0

似乎不是太快,但它确实更清洁。谢谢! – helion3 2013-03-01 23:47:14