Какова лучшая практика для удаления данных из таблицы базы данных? - PullRequest
2 голосов
/ 11 августа 2011

В моем случае я хочу сохранить таблицу для хранения каких-либо данных и через некоторое время удалить из первой таблицы и сохранить в другой таблице.

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

Ответы [ 3 ]

6 голосов
/ 11 августа 2011

Как правило, я следую этой процедуре. Incase Я хочу удалить строку. У меня есть tinyint столбец с именем deleted. Я помечаю этот столбец для этой строки как true.

Это означает, что эта строка была помечена как удаленная, поэтому я не могу ее поднять.

Позже (возможно, один раз в день) я запускаю скрипт, который за один раз либо полностью удаляет строки, либо переносит их в другую таблицу ... и т. Д.

Это полезно, так как каждый раз, когда вы удаляете строку (даже если это 1 строка), mysql должен переиндексировать (это индексы). Это может потребовать значительных системных ресурсов в зависимости от размера ваших данных или количества индексов. Возможно, вы не захотите брать на себя эти накладные расходы каждый раз ...

0 голосов
/ 12 августа 2011

Если вы архивируете старые данные, должен быть способ настроить запланированное задание в mysql.Я знаю, что в SQL Server есть такая функция, которая требуется большинству баз данных, поэтому я полагаю, что это можно сделать в mySQL.Запланируйте задание на запуск в часы простоя.Пусть он выберет все записи старше года (или сколько угодно времени записей, которые вы хотите сохранить активными) и переместите их в архивную таблицу, а затем удалите их.В зависимости от количества записей, которые вы будете перемещать, лучше всего делать это раз в неделю или ежедневно.Вы не хотите, чтобы количество записей, срок действия которых истекает, было настолько большим, что это сильно сказывалось на производительности или делало работу слишком долгой.

В архиве важно, чтобы вы хранили все записи, которые будут необходимы часто, и не забывайте рассматривать отчеты в этом (многие отчеты должны иметь данные за годы или за два года,не архивируйте записи, в которых эти отчеты должны быть).Затем вам также необходимо настроить способ доступа пользователей к архивным записям в тех редких случаях, когда им может понадобиться их просмотреть.

0 голосов
/ 11 августа 2011

Вы не предоставили достаточно информации, но я думаю, что если обе таблицы имеют одинаковую структуру данных, то вы можете избежать использования двух таблиц.Просто добавьте еще один столбец в первую таблицу и установите status / type для этих конкретных записей второй таблицы.

Например:

id | Name | BirthDate  |    type
------------------------------------
 1 | ABC  | 01-10-2001 | firsttable
 2 | XYZ  | 01-01-2000 | secondtable

Youможно выбрать такие записи:

select * from tablename where type='firsttable'

ИЛИ

select * from tablename where type='secondtable'
...