Вопрос об удалении старых записей из базы данных

#sql-server #tsql

#sql-сервер #tsql

Вопрос:

Итак, у меня есть таблица SQL Server.

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

Как я могу запустить что-то, что всегда удаляет записи, которым 24 часа?

Ответ №1:

Да, взгляните на это: Как: Запланировать задание (SQL Server Management Studio)

затем просто запланируйте свой запрос:

 delete from table_name where date_created < dateadd(d,-1,GETDATE())
  

Ответ №2:

Я хотел бы добавить пару моментов к этому обсуждению…

  1. Чтобы избежать сканирования первичного ключа, убедитесь, что в заданном столбце datetime есть индекс (уникальный или нет, в зависимости от данных).
  2. Также просмотрите планы выполнения инструкции, которую вы пытаетесь использовать, и рассмотрите возможность включения ее в транзакцию с последующим откатом, чтобы вы могли повторить процесс и оценить различия.

Например: Сравнение

 date_created < dateadd(d,-1,GETDATE())
  

Для

 date_created < getdate()-1
  

Показывает, что функция dateadd увеличивает значительные накладные расходы на вычисление, и хотя это было бы быстрее, чем сканирование PK, всегда лучше выбрать самый быстрый вариант в целом.

Комментарии:

1. Вы могли бы просто вставить будущую дату в столбец deleteAfter или ExpirationDate, убрав все вычисления в инструкции delete и переместив их во вставку. конечно, ваш пробег может отличаться, поэтому ориентируйтесь, ориентируйтесь,ориентируйтесь.

Ответ №3:

 DELETE FROM <tableName> WHERE <col> < getdate()-1 
  

Комментарии:

1. Ну, мой вопрос был в основном в том, как настроить что-то подобное, чтобы всегда быть уверенным, что в базе данных нет записей старше 24 часов, однако, не приведет ли это к удалению записей, где день был на один предшествующий, без учета часов и т.д.?

2. getdate() Функция возвращает текущую дату и время; вычитая из нее единицу, вычитается 24 часа, сохраняя информацию о времени нетронутой (например, select cast('2011-04-05 12:24:39.943' as datetime) - 1 = '2011-04-04 12:24:39.943' ).