Я копирую данные из таблицы в другую.Мне интересно, что было бы лучше для поддержания целостности и производительности данных.
Шаги :
- копировать данные старше x дней из журнала в архив
- удалить данные из журнала, если они существуют в архиве
С
INSERT INTO archive
SELECT * FROM logs
WHERE datediff(day, logs.timestamp, GetDate()) > @day
DELETE logsf FROM logs As logsf
INNER JOIN archive as archivef ON logsf.uuid = archivef.uuid
WHERE datediff(day, logsf.timestamp, GetDate()) > @jour
К
INSERT INTO archive
SELECT * FROM logs
WHERE datediff(day, logs.timestamp, GetDate()) > @day
AND NOT EXISTS (
SELECT * FROM archive
WHERE datediff(day, logs.timestamp, GetDate()) > @day
)
DELETE logsf FROM logs As logsf
INNER JOIN archive as archivef ON logsf.uuid = archivef.uuid
WHERE datediff(day, logsf.timestamp, GetDate()) > @jour
- Это хорошая вещь, чтобы убедиться, что вы не пытаетесь вставить уже существующие данные в таблицу?
- Если мои 2 исходных запроса находятся в транзакции, является ли мой второй вариант бессмысленным (и добавляет бесполезное время обработки)?
Какой из них вы бы использовали:
Вставить, если не существует + Удалить, если существует (независимость)
или
Вставить и удалить, если нет ошибки (транзакция)
или
объединяют оба
и почему?