Самый эффективный способ удаления записей на основе идентификатора первичного ключа - PullRequest
0 голосов
/ 25 января 2019

У меня есть таблица (table1), у которой id является первичным ключом и имеет инкрементный характер.В таблице есть Updatetm, в котором есть дата и время последнего обновления.В таблице около 300 миллионов записей.У меня есть другая таблица table2, которая синхронизируется с table1.Каков наилучший способ удаления из таблицы2, когда идентификатор удаляется из таблицы1?Является ли левое объединение эффективным способом, нужно ли мне каждый раз сравнивать 300 миллионов записей для проверки на удаление?

Delete from table2
where id not in(Select id from table1)

Ответы [ 2 ]

0 голосов
/ 25 января 2019

Я бы предложил вам использовать «Существующие» вместо «Не в»

Delete from table2 t2
where exists ( select 1 from table1 t1 where t1.id=t2.id)
0 голосов
/ 25 января 2019

Убедитесь, что у вас есть индекс, который охватывает этот запрос. То есть убедитесь, что table1.id и table2.id проиндексированы (да, этот индекс ускорит удаление даже при том, что индексы нужно будет обновить.) Это поможет с JOIN.

Кроме того, возможно, вы захотите проверить пакетное удаление,

WHILE <some_condition> BEGIN
    DELETE TOP (1000) t2
    FROM table2 t2
    LEFT OUTER JOIN table1 t1 ON t2.id = t1.id
    WHERE t1.id IS NULL
END

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

SELECT COUNT(*) FROM table2 t2
LEFT OUTER JOIN table1 t1 ON t2.id = t1.id
WHERE t1.id IS NULL

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...