2016-07-12 2 views
1

У меня есть таблица с более-менее 1b-данными, и она хранит данные за 180 дней, поэтому мне нужно удалить те записи, которые более 180 дней ,Как быстро удалить некоторые записи из таблицы с 1b-записями

Во-первых, я просто использовал delete для удаления записей, и это заняло почти 1 час, а затем я попытался creat table каждый день и сохранили данные в таблицу дня, и drop таблицу, которая более чем на 180 дней ,

Есть ли лучший способ удалить эти записи, я не думаю, что мой второй способ - это хорошо сделать.

Прошу прощения за мой плохой английский, но, пожалуйста, дайте мне руку!

Спасибо!

+0

Вы проиндексировали столбцы (столбцы в разделе where)? Это может ускорить процесс. – Sami

+0

1. добавьте индекс в столбец даты. 2. Делать удаление небольшими партиями – Squirrel

+0

Я использовал 'NONCLUSTERED INDEX' на столбцах времени, но это не очень помогло. @Sami –

ответ

0

Следующее решение может быть полезно.

  • Изменить Recovery Mode to SIMPLE
  • Удалить данные вашей базы данных в кусках

как:

DECLARE @Deleted_Rows INT 
SET @Deleted_Rows = 1; 


WHILE (@Deleted_Rows > 0) 
    BEGIN 
BEGIN TRANSACTION 
//--Delete some small number of rows at a time 
DELETE TOP (10000) LargeTable 
WHERE readTime < dateadd(MONTH,-7,GETDATE()) 


SET @Deleted_Rows = @@ROWCOUNT; 

COMMIT TRANSACTION 
CHECKPOINT -- for simple recovery model 


END 
  • изменения режима восстановления обратно к полному

Надеюсь, это поможет!

+0

Спасибо, я пробовал этот путь, но Я не думаю, что это достаточно быстро. –

Смежные вопросы