MYSQL:更新200万条记录

时间:2013-07-11 08:26:47

标签: mysql

好的,我在一张桌子上有超过200万个电话号码,我需要从电话领域删除所有空格。

我有INDEX电话字段并优化了表格但是当我运行以下查询时它仍然很慢并且需要永远 - 实际上我还在等待30分钟已经过去

UPDATE ACTNSW SET phone = REPLACE(phone, ' ', '');

我需要知道是否有办法加快这个过程,以免花费这么长时间。

它使用的数据库Scheeme是InnoDB 服务器版本:5.5.31-1(Debian)

2 个答案:

答案 0 :(得分:2)

这是基本的SQL查询。你不能做太多关于它但你可以做一件事不运行更新
查询整个表。使多个更新查询类似..

UPDATE ACTNSW SET phone = REPLACE(phone, ' ', '') where id < .2 milian
UPDATE ACTNSW SET phone = REPLACE(phone, ' ', '') where id < .4 milian and id > .2 milian
UPDATE ACTNSW SET phone = REPLACE(phone, ' ', '') where id > .5 milian and id > .4 milian
....

我认为它会对你有所帮助。

答案 1 :(得分:1)

如果您可以脱机执行更新,则可以使用mysqldump输出表的内容。接下来使用sed / awk对文件执行替换操作。然后将表放在服务器上并使用dumpfile恢复它。