每周运行一次后台服务,检查导出文件,其中包含可能需要合并到数据库中的I列表。目前我的数据库里有大约350万条记录。
在从文件中获得所有可能的新id之后,我做的第一件事就是检查id是否已经在数据库中。这张支票大约需要9-10分钟才能完成。这是一个背景工作,所以它不是世界末日,我只是想知道它是否可以更有效率。
以下是我目前使用的方法(似乎是我找到的最快的方法)
var newIds = new List<int>();
var existingIds = _context.{currentRecords}.Select(i => i.Id).ToList();
var ingestIds = ingestList.Select(i => i.Id).ToList();
newIds = ingestIds.Where(id => !existingIds.Contains(id)).ToList();其他我尝试过的更慢的东西
foreach (var id in ingestIds)
{
if (!_context.{currentRecords}.Any(i => i.Id == id)) newIds.Add(id);
}我尝试过其他几种基于搜索的略有不同的方法,但它们都比较慢,显然我把代码放错了。任何帮助都是非常感谢的!谢谢!
发布于 2022-06-24 23:11:12
我想问题是你把所有的数据都交给了客户端。也许你可以试试这个;
List<TKey> ingestIds = ingestList.Select(i => i.Id);
var existingIds = _context.{currentRecords}.Where(i => ingestIds.Contains(i.Id)).Select(i => i.Id).ToList();
var newIds = ingestIds.Except(existingIds);这将在数据库中执行where和select操作。
https://stackoverflow.com/questions/72734068
复制相似问题