Как быстрее удалить старые записи

У меня есть таблица с примерно 35 миллионами строк. каждый имеет около 35 целочисленных значений и одно значение времени (последнее обновление). Таблица имеет два индекса: первичный — использует два целочисленных значения из столбцов таблицы. Вторичный — использует 1-е целое число из основного + другое целочисленное значение.

Я хотел бы удалить старые записи (их около 20 миллионов) в соответствии с полем даты.

Каков самый быстрый способ: 1. Удалить как есть в соответствии с полем даты? 2. Создайте еще один индекс по дате, а затем удалите по дате.

Будет однократное удаление большой части данных, а затем постепенное еженедельное удаление гораздо меньших частей.

Есть ли другой способ сделать это более эффективно?


person Nir    schedule 08.08.2010    source источник


Ответы (3)


может быть быстрее создать новую таблицу, содержащую строки, которые вы хотите сохранить, удалить старую таблицу, а затем переименовать новую таблицу.

person Chris Card    schedule 08.08.2010
comment
Отличная идея! Я проведу тест на компьютере разработчика, чтобы посмотреть, как это работает. - person Nir; 08.08.2010

Для еженедельного удаления поле индекса даты ускорило бы процесс.

person Mchl    schedule 08.08.2010

Я думаю, что самый быстрый (но не самый простой) - это разделить ваши записи на несколько таблиц на основе даты, например. заданную неделю, а затем иметь таблицу объединения всех этих таблиц для регулярных запросов по всему этому (чтобы ваши запросы не изменились). Каждую неделю вы будете создавать новые таблицы и переопределять таблицу объединения.

Когда вы хотите удалить старые записи, вы просто воссоздаете таблицу объединения, чтобы оставить записи в старых таблицах, а затем удалите оставшиеся (не забудьте обрезать перед удалением в зависимости от вашей файловой системы). Это, вероятно, самый быстрый способ добраться туда с MySQL.

Беспорядок, чтобы управлять, хотя :)

person Hans-Henrik Stærfeldt    schedule 16.05.2013