Обработка данных таблицы - оптимальное использование

0
  • У меня есть таблица с 8 миллионами записей в mysql.

  • Я хочу сохранить последние данные за одну неделю и удалить остальные, я могу взять дамп и воссоздать таблицу в другой схеме.

  • Я пытаюсь правильно получить запросы, поделитесь своими взглядами и лучшими подходами для этого. Самый лучший способ удалить, чтобы он не повлиял на другие таблицы в процессе производства.

Спасибо.

Теги:

1 ответ

0

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?

  • 0
    За день будет вставлено 40 тыс. Записей, я хочу сохранить данные за последнюю неделю и перенести остальные.
  • 0
    @sled - Спасибо, но в моей БД нет поддержки разделов. Разве это не может быть сделано с помощью запросов?
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню