2016-01-27 2 views
0

У меня есть огромный MySQL таблицы, и она растет примерно на 90 строк в секунду, через каждые 4 часа в 1,3 миллиона строк получает сбрасывали там с отметкой времениMySQL Удалять старые строки на один день

user(varchar) | created_at(timestamp) 
---------------------------- 
user 1   | 2016-01-27 08:00:00 
user 2   | 2016-01-27 08:00:00 
user 3   | 2016-01-27 08:00:00 
... 
user 1   | 2016-01-27 12:00:00 
user 2   | 2016-01-27 12:00:00 

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

Там всегда строки в 00:00, так что я думал что-то вдоль линий

created_at >= date + 00:00 and created_at < date + 19:59

или

select user, max(created_at) from table where created_at = date group by username

+1

, что вы имеете в виду только одна строка в день? – essramos

+0

Итак, каждые 4 часа я получаю данные для всех пользователей, но мне не нужно, чтобы это было нормально через месяц, всего один раз в день, поэтому идеально просто сохранить первый импорт в день. Минуты в секундах всегда равны 0, так как это время начала импорта, его делается на PHP как «дата (« Ymd H: 00: 00 »)' – Adam

+0

, вы можете фактически использовать [события] (https: // dev .mysql.com/doc/refman/5.7/ru/create-event.html) на mysql, вы можете планировать эти события для удаления определенной таблицы и запускать это событие каждый день в определенное время. – essramos

ответ

0

Правильно У меня была небольшая игра, поэтому я отправлю ее всем, кто захочет обрезать свои данные.

created_at должен быть TIMESTAMP

delete from `table` where `created_at` < DATE_SUB(NOW(), INTERVAL 30 DAY) and HOUR(created_at) = 00 

Это удалит все строки с час значение 00, но если вам нужно больше гибкости, вы можете сделать

delete from `table` where `created_at` < DATE_SUB(NOW(), INTERVAL 30 DAY) and HOUR(created_at) between 0 and 4 
0

Для такого большого количества данных, вы можете хотите использовать разделы для управления данными, поскольку выполнение операторов удаления с фильтром на больших таблицах может занять очень много времени. Когда вы создаете разделы по месяцам, удаление раздела происходит очень быстро. Но это удалит данные в этом месяце, поэтому вам может потребоваться сохранить сводку пользователя в другой таблице перед удалением раздела.

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