如何优化 EF 查询?

How to optimize EF query?

我有一个查询 returns 31,000 条记录,但使用 EF 时速度很慢。我想优化这个查询。我应该如何优化它?

 [HttpGet]
public IActionResult SearchInTaminJobs(string term)
{
    
    var query = _context.TaminJobs.Where(Ad => Ad.jobName.Contains(term)).Select(c => 
    c.jobName + c.jobCode).ToList();

        return Ok(query);
 
}

我写的这个查询去检查所有数据库records.But现在我想要一个查询去获取与 jobName 相似的前 20 条记录的列表,而不是检查所有数据库记录

我相信这不是 EF 问题。在您的查询中,您使用 contains 和完整的 table 扫描,即您遍历所有记录,并针对每条记录检查 jobname 是否包含文本片段。由于它是 contains 检查,因此您不能仅在此列上建立索引。所以你的查询很慢。另外,您 return 很多记录,这也会对执行时间产生影响。在执行 contains 之前尝试添加更多过滤(通过一些索引 id 或类似的)。

确保您的查询速度较慢 运行 SSMS 中的这个原始 sql 查询:select jobName + jobCode from TaminJobs where jobName like '%YOUR_TERM_HERE%'.

您还可以尝试限制将被 return 编辑的记录数:_context.TaminJobs.Where(Ad => Ad.jobName.Contains(term)).Take(20)