У меня есть MySQL таблицы:MySQL: Разделение является хорошим способом обработки удалений?
CREATE TABLE responses (
id INT NOT NULL AUTO_INCREMENT,
other_id INT NOT NULL,
details TEXT,
deleted BOOLEAN,
PRIMARY KEY (id)
);
Пользователи могут удалять записи в responses
.
Мой план состоит в том, чтобы использовать поле deleted
для реализации удаления. Каждый раз, когда пользователь удаляет запись, я устанавливаю deleted
в 1
.
Время от времени я мог бы избавиться от всех удаленных записей или архивировать их. Я имею в виду использование секционирования, чтобы сделать это быстрее:
PARTITION BY LIST(deleted) (
PARTITION pActive VALUES IN (0),
PARTITION pDeleted VALUES IN (1)
);
Мой вопрос будет это сделать акт удаления медленнее? Теперь, когда я изменяю «удаленное» поле записи, MySQL должен переместить запись в совершенно другой раздел. Кажется, что это может быть медленным.
Любые предложения были бы весьма полезными.
Я работал над системами, использующими подход «мягкого удаления», подобный этому. Они хотели узнать, сколько из них было создано в общей сложности против того, что фактически использовалось в системе. Некоторые вещи были удалены на основе суеверия/последующих вещей, но они хотели иметь возможность восстановить при необходимости. Просто зависит от бизнес-правил, но это может повлиять на ресурсы/пространство на диске ... –
@OMG Ponies - Я просто помню, что это был кошмар в проекте, над которым я работал. Я думаю, что лучшим подходом было бы использование триггера для копирования записей в другую таблицу, если вы хотите сохранить удаленные данные, но я бы избегал удаленных флагов, таких как чума :). Ваш пробег может отличаться. – dcp
@dcp: Триггер для перемещения вещей требует дублирования таблицы - ни один из администраторов баз данных, о которых я знал в то время, не допустил бы такой вещи в своей модели данных. –