c# - 如何优化使用“包含”方法的实体框架查询
问题描述
我有 ac# 代码,在其中我使用 LINQ 查询通过将字符串类型的特定属性与字符串列表进行比较来检索一堆对象。c#代码如下:
var list = new List<string>{.....}
var query = from record in context.Records.AsNoTracking()
where list.Contains(record.Name)
orderby record.Name
select new
{
...
};
var result = query.ToList();
我的问题是,当列表很大时,此查询的性能会非常低,在某些情况下需要几分钟才能返回结果。
我需要知道提高此查询性能的可能解决方案是什么?
解决方案
此请求将数据库中的每一行与集合中的每个项目进行比较。
- 为 record.Name 添加索引以过滤和排序名称
- 使用前排序列表集合
在每个步骤之后分别测量请求性能。
- 在启动请求之前查看在 sql 存储中使用临时表来存储列表项的可能性
- 可以使用 LinqPad 将 linq 请求转换为 sql 请求以查看其性能。
如果您受 Linq 性能困扰并且非常了解 SQL,您可以使用 Dapper 来处理读取请求和报告。
推荐阅读
- javascript - 使用for循环迭代时包含()不匹配字符串
- javascript - 如何自定义融合甘特图?
- google-cloud-platform - GCP:如何修剪/维护工件注册表存储?
- python - 数据框打印仅显示 2 行而不是 20 行
- android - Espresso 测试因以下原因而失败:androidx.test.espresso.AppNotIdleException。以下空闲条件失败 MAIN_LOOPER_HAS_IDLED
- arrays - 优化读取语句
- loopback4 - loopback4 中内置模型的可用性
- c# - 在 Linq Lambda 中转换 mysql
- vue.js - 在 v-for 循环中使用 v-model
- git - 计算从特定分支创建的分支数