Производительность большого предложения IN
ужасна, это в основном из-за времени компиляции запроса. Так что, если вы скажете List<int>
, содержащий идентификаторы, то это:
List<int> myIDs = GetIDs(); //20,000
var inList = myIDs.Distinct(); //5,000 distinct IDs
//pass inList to SQL
будет намного быстрее, чем:
List<int> inList = GetIDS(); //20,000
//pass inList to SQL
Если присоединение является альтернативой, если вы можете получить список идентификаторов, которые хотите удалить, выполнив запрос, лучше выполнить подзапрос с этим, что-то вроде этого, используя запрос в Where
:
DELETE FROM Table
Where IdColumn IN (Select ID
From OtherTable
Where Name Like '%DeleteMe%')
Я не уверен, что ваш список исходит из внешнего источника и не может быть определен следующим образом ... но если это возможно, ваше удаление будет очень быстрым.