2016-02-20 50 views
0

我有一个包含20,085,250行的表,并且某个人让\ n,\ r和\ 0在表格中间混合。只需要10秒钟就可以做SELECT count(*)FROM Table,所以它非常庞大。Mysql删除换行符,空字符和LineFeed QUICKLY

我需要将所有这些字符全部替换为空。我已经能够在2.5年内用一列完成这项工作。我有10列,我需要做到这一点,它是在生产服务器上,我不能让表锁定在更新查询为2.5年。我当前的查询看起来像这样

UPDATE Table set `column1` = REPLACE(REPLACE(REPLACE(`column1`, '\r', ''), '\n', ''), '\0', ''); 

有没有人有任何好主意如何加速这个庞然大物?

+0

您可以通过使用WHERE条件将更新的行限制为行的特定子集来递增式地执行此操作。例如:'id BETWEEN 1 AND 1000000',然后是'id BETWEEN 1000001 AND 2000000',等等......虽然,如果你期待这个数据清理能够加快'SELECT COUNT(*)'查询的速度,我想你'我会失望的。 – Uueerdo

+0

不,我不想加快计数只是加快更新 –

+0

也许这是我唯一的选择? –

回答

0

所以我发现我应该试试并立即更新所有10列,因为显然MySQL的最大开销只是提出了行后,它在那里做东西很容易。所以我只是一次更新了所有10个,整个过程仅需不到2.5分钟。我知道这并不理想,但它是我找到的最佳解决方案。