Удаление большого количества строк может быть дорогим.Я бы начал с записи этого как exists
:
DELETE FROM Phrase
WHERE NOT EXISTS (SELECT 1 PhraseSource ps WHERE phrase.PhraseId = ps.PhraseId);
Это может позаботиться об индексе на PhraseSource(PhraseId)
.Этого, вероятно, достаточно.
Если нет, это может быть связано с накладными расходами удалений, которые являются вашей реальной проблемой.Чтобы обойти это, вам понадобится временная таблица.