2016-12-03 4 views
1

У нас есть таблица в нашей базе данных, которая отслеживает поведение пользователя. В основном каждая страница, которую пользователь просматривает, отслеживает это.Как очистить таблицу записей за 30 миллионов

В таблице мы имеем следующее:

id | user_id | user_ip | page | created_on 

Когда пользователь проверяет сайт с компьютера, и скажем, что он проверяет конкретную статью система сохраняет в разделе «страницы» следующее «/ статьи/конкретных/slug ", однако, если пользователь проверяет одну и ту же страницу с мобильной версии веб-сайта, он сохраняет« http://m.website.com/article/specific/slug »

Мы ищем, чтобы изменить это.

Мы добавили новое поле в базе данных, как перечисление (шт, м), и поэтому мы хотим, независимо от устройства, чтобы сохранить под «страницей» всегда «/ статьи/конкретные/бруски»

Один вопроса является то, что теперь у нас есть 30 миллионов записей в прошлом, которые нужно преобразовать.

Значение: мы пишем запрос, который проверяет наличие «http://m.website.com», обновляет поле, удаляя «http://m.website.com» и обновляя поле «устройство» как «m».

Может кто-нибудь помочь с этим?

+0

В чем вопрос? Как написать этот запрос? Или как выполнить его против таблицы из 30 миллионов строк на реальном сервере? – cherouvim

+0

Вопрос в том, что мне действительно нужен запрос, но что-то, что мы можем запустить на 30 миллионов строк. – Hossj

+0

Если нагрузкой на MySQL является проблема, вы всегда можете выгрузить таблицу в файл, используйте инструменты командной строки, такие как 'sed', чтобы внести изменения (возможно, даже на другой сервер), затем импортируйте таблицу из файла –

ответ

1

Запрос:

update visits_table 
set 
    page=replace(page, 'http://m.website.com', ''), 
    device='m' 
where 
    page like 'http://m.website.com%'; 

Чтобы пройти через 30 мил строк вы должны ... пройти через 30 мил строк. Таким образом, вы будете либо сделать это только с вышеупомянутым запросом либо: (? Например, ранние утренние часы)

  • когда сайт закрыт на техническое обслуживание
  • когда сайт имеет низкий трафик
  • всякий раз, когда вы хотите, но ожидайте некоторого стресса на mysql, пока он не будет выполнен (это может занять некоторое время)

В противном случае, если ваши идентификаторы являются инкрементальными, вы можете обновлять их партиями, разбивая запрос во многих запросах. например:

update ... where ... and id between 1 and 1000000; 
update ... where ... and id between 1000001 and 2000000; 
update ... where ... and id between 2000001 and 3000000; 
... 
Смежные вопросы