2013-07-11 4 views
0

Итак, у меня есть более 2 миллионов телефонных номеров в одной таблице, и мне нужно удалить все пробелы из поля телефона.MYSQL: обновление заменить на 2 миллиона записей

У меня есть индекс поле телефона и оптимизировал таблицу, но до сих пор, когда я выполнить следующий запрос это так медленно и принимает навсегда - ведь я все еще жду и 30minutes есть прошлое

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

мне нужно знать, если есть, чтобы ускорить этот процесс, чтобы он не занимал много времени.

Database 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. Затем отбросьте таблицу на сервер и восстановите ее с помощью dumpfile.

Смежные вопросы