удаление строк из огромной таблицы SQL Server 2016 - PullRequest
0 голосов
/ 02 октября 2018

Helo,

У меня огромная таблица T (около 10 ^ 10 записей) T.id является первичным ключом

Когда я пытаюсь:

delete from T where id in (1,2,3....)

он работает быстро (около 50 секунд для 10000 записей)

Когда я пытаюсь использовать эквивалентный запрос:

delete from T where id < 10000

он работает очень долго (более 1 часа !!!!)

Есть предложения?

Ответы [ 3 ]

0 голосов
/ 02 октября 2018

Если вы удаляете огромное количество записей из Таблицы, это может привести к Deadlock. Лучший способ удаления огромных записей - это столбец Take year и Month of Date для EG:

DELETE from Table WHERE  id in (1,2,3....) AND YEAR(Date)=2018 AND Month(Date)=1
0 голосов
/ 02 октября 2018

Я думаю, что альтернативным подходом может быть копирование строк, которые вы хотите сохранить, в другую таблицу.Во многих случаях копирование данных происходит намного быстрее, чем удаление данных.Так что, даже если вы хотите сохранить 90%, это все равно может быть более быстрым вариантом.

Я думаю, что это стоит хотя бы теста.

Удачи!

0 голосов
/ 02 октября 2018

Вы можете смешать оба с помощью:

delete from T where id in (select id from T where id < 10000)
...