#mysql #partitioning
#mysql #разбиение
Вопрос:
В настоящее время у меня есть таблица с примерно 4 миллионами строк, но я хотел бы сохранить только данные за последние три месяца в последнем разделе, когда этим данным исполнится 91 день, их следует удалить из этого раздела и отправить в другой раздел или таблицу.
Например,
- Раздел 0: просто сохраните данные за последние три месяца в этом разделе (сохраните все текущие данные, где DateOrder DATE_DIFF (NOW() — ИНТЕРВАЛ 3 МЕСЯЦА, NOW()) )
- Раздел 1: остальные данные из таблицы (сохраните все данные, которым более 3 месяцев от текущей временной метки. ( DateOrder < NOW() — ИНТЕРВАЛ 3 МЕСЯЦА)
CREATE TABLE LargeTable
(
id INT NOT NULL AUTO_INCREMENT
, CustomerName VARCHAR(100)
, CustomerEmail VARCHAR(50)
, DateOrder DATETIME NULL
, PRIMARY KEY (id)
);
Комментарии:
1. Ни за что. Просто переместите строки полностью старого раздела в архивную таблицу, затем удалите этот раздел, а затем создайте новый раздел на будущий период. Выполняйте это каждый квартал из процедуры события. Ваша таблица, наконец, будет содержать строки, которым где-то не более 91-120 дней.
Ответ №1:
Я бы использовал PARTITION BY RANGE(TO_DAYS(DateOrder))
и использовал еженедельные разделы. Это будет около 15 разделов, что является хорошим балансом между скоростью и пространством.
Гораздо больше конкретных деталей для таких случаев содержится в http://mysql.rjweb.org/doc.php/partitionmaint
300 Тыс. строк — это не так много; DROP PARTITION
это будет довольно быстро раз в неделю.
Наверняка есть другие столбцы и / или индексы?