【发布时间】:2019-06-21 13:42:02
【问题描述】:
我正在使用这个库来批量执行批量删除,如下所示:
while (castedEndedItems.Any())
{
var subList = castedEndedItems.Take(4000).ToList();
DBRetry.Do(() => EFBatchOperation.For(ctx, ctx.SearchedUserItems).Where(r => subList.Any(a => a == r.ItemID)).Delete(), TimeSpan.FromSeconds(2));
castedEndedItems.RemoveRange(0, subList.Count);
Console.WriteLine("Completed a batch of ended items");
}
正如你们所见,我一次性删除了一批 4000 个项目,并将它们作为参数传递给查询...
我正在使用这个库来执行批量删除:
https://github.com/MikaelEliasson/EntityFramework.Utilities
但是这样的性能绝对是糟糕的......我测试了几次应用程序并删除了 80000 条记录,例如它需要 40 分钟!?
我应该注意,我删除的那个参数 (ItemID) 是 varchar(400) 类型的,并且出于性能原因它被索引......
是否有任何其他库我可以使用或调整此查询以使其更快地工作,因为目前的性能绝对糟糕..:/
【问题讨论】:
-
您要删除所有内容吗?还是只是行的一个子集? (即
truncate table是一个选项吗?) -
使用带有实体框架原始查询的 SQL 语句。有关示例,请参阅here。性能应该几乎是即时的。
-
@MarcGravell no 如你所见,我有一个列表,其中只有匹配的项目必须通过名为“ItemID”的参数删除 - 这是 varchar(250) 类型:)
-
@RobertHarvey 我认为 SQLBulkCompy 库的实现会更好,不是吗? SQLBulkCopy 是为这些类型的东西制作的。我只是找不到任何具有良好实现的东西^^
-
您是在批量复制还是批量删除?
标签: c# asp.net asp.net-mvc bulk bulk-delete