2013-07-11 57 views
0

好的,我在一个表中有超过200万个电话号码,我需要从电话字段中删除所有空格。MYSQL:在2百万条记录上更新替换

我INDEX手机领域,优化表,但仍当我运行下面的查询它是如此缓慢,永远需要 - 事实上我仍然在等待和30分钟有过去

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

我需要知道是否有加速这一过程,以便它不需要那么长时间。它使用

数据库scheeme是InnoDB 服务器版本:5.5.31-1(Debian的)

+3

既然这是一次性操作,那么重要吗? – eggyal

回答

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

有什么意义? – eggyal

+0

关键是如果你打破了,那么它一次只会占用更少的内存。所以它会正常运行。 –

+1

我不明白为什么内存使用会有很大的不同。 – eggyal

1

如果您有可能在离线状态下进行更新,则可以使用mysqldump输出表格的内容。接下来用sed/awk对文件执行替换操作。然后将您的表放到服务器上并使用转储文件恢复它。