gpt4 book ai didi

c# - 性能 - 使用 LINQ 删除多个 MSSQL 数据库条目

转载 作者:行者123 更新时间:2023-11-29 03:02:25 26 4
gpt4 key购买 nike

我有一个包含几百万个条目的 MSSQL 数据库表。每个新条目都从上一个条目获得一个 ID +1。这意味着较低的 ID 号是较旧的条目。现在我想借助它的 ID 删除数据库中的旧条目。我删除所有低于“maxID”的“条目”。

while (true)
{
List<Entry> entries = entity.Entry.Where(z => z.id < maxID).Take(1000).ToList();

foreach (var entry in entries)
{
entity.Entry.DeleteObject(entry);
}

if (entries < 1000)
{
break;
}
}

我不能通过一个查询获取所有条目,因为这会引发 System.OutOfMemoryException。所以我只取了 1000 个条目并重复删除功能,直到删除每个条目。

我的问题是:“.Take()”的最佳条目数是多少?

最佳答案

删除并重新创建数据库中的表会更快,您可以通过调用存储过程直接对数据库执行命令 ExecuteStoreQuery方法。

Entity Framework 自动生成的任何命令可能比数据库开发人员明确编写的类似命令更复杂。如果您需要显式控制针对数据源执行的命令,请考虑定义到表值函数或存储过程的映射。 - MSDN

正如我所看到的您的代码(如果我错了请纠正我或改进答案),您的代码实际上是在内存中加载实体,这是一项开销成本,因为您需要执行删除操作,并且您的查询将创建删除查询标记为删除对象。因此,就性能而言,调用存储过程并直接对数据库执行查询会更好。

ExecuteStoreCommand Method

Directly Execute commands

关于c# - 性能 - 使用 LINQ 删除多个 MSSQL 数据库条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21024017/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com