У меня есть чрезвычайно большая таблица, из которой я хотел бы удалить старые строки. Пример таблицы:Как эффективно удалить истекшие строки из большой таблицы MySQL
| customer_id | first_purchase_date | last_purchase_date |
|<primary key>| | <index> |
** Я использую эту таблицу примеров для аргументации. Таблица, о которой идет речь, не является таблицей клиентов. За последние 2 месяца реальная таблица выросла до 28 ГБ и используется для расчета чего-то, что требует только 2 недели исторических данных.
Что бы я хотел сделать, это удалить клиентов из этой таблицы, которые в прошлом году ничего не купили. То есть delete from table where last_purchase_date < now() - interval 1 year;
Симпатичное удаление, как это было бы слишком дорогостоящим в базе данных. Я знаю, что раздел можно использовать для усечения старых строк, но я не уверен, как эффективно его реализовать.
Кроме того, если клиент купил что-то, то эта строка может потенциально перейти на другой раздел, обновив last_purchase_date. Не будет ли это дорого?
Заранее благодарю за любое направление!
Вы действительно хотите удалить своих клиентов? –
Partinionning on date - это решение, позволяющее получить лучшие результаты, если производительность вашей проблемы ... но это ваша проблема вообще? А что такое «чрезвычайно большая таблица»?Дайте некоторые цифры. Удаление клиентов редко бывает хорошей идеей, и переместить их в таблицу «архив» было бы лучше. Как вы планируете их удалить? это будет ежегодный процесс (в конце 2017 года, удалить все 2016) или ежедневный процесс (в конце каждого дня удалите те, которые <[дата - 1 год]). Подводя итог, вам действительно нужно добавить дополнительную информацию –
Таблица, о которой идет речь, на самом деле не является базой клиента – AYR