У меня есть таблица с 8 миллионами записей в mysql.
Я хочу сохранить последние данные за одну неделю и удалить остальные, я могу взять дамп и воссоздать таблицу в другой схеме.
Я пытаюсь правильно получить запросы, поделитесь своими взглядами и лучшими подходами для этого. Самый лучший способ удалить, чтобы он не повлиял на другие таблицы в процессе производства.
Спасибо.
MySQL предлагает вам функцию, называемую разделением. Вы можете сделать горизонтальный раздел и разбивать таблицы по строкам. 8 миллионов не так много, как скорость ввода в неделю?
CREATE TABLE MyVeryLargeTable (
id SERIAL PRIMARY KEY,
my_date DATE
-- your other columns
) PARTITION BY HASH (YEARWEEK(my_date)) PARTITIONS 4;
Подробнее об этом можно прочитать здесь: http://dev.mysql.com/doc/refman/5.1/en/partitioning.html
Изменить: это создает 4 раздела, поэтому это будет продолжаться 4 недели - поэтому я предлагаю перейти на разделы по месяцам/годам. Предел раздела довольно высок, но на самом деле это вопрос, как выглядит скорость ввода в неделю/месяц/год.
Изменить 2
MySQL5.0 поставляется с механизмом Archive Engine, вы должны использовать его для своей таблицы Archive (http://dev.mysql.com/tech-resources/articles/storage-engine.html). Теперь, как получить данные в таблице архива? Кажется, вы должны написать cron-задание, которое выполняется в начале каждой недели, перемещая все записи в таблицу архивов и удаляя их из оригинала. Вы можете написать хранимую процедуру для этого, но задача cron должна запускаться в оболочке. Помните, что это может повлиять на вашу целостность данных. Как насчет перехода на MySQL 5.1?