performance - LINQ AsNoTracking 运行缓慢

我需要来 self 的数据库的未经编辑的项目列表。 它运行缓慢,所以我试图加快速度。

所以我将 AsNoTracking 添加到 LINQ 查询中,它运行得更慢了!

以下代码平均耗时 7.43 秒。 AsNoTracking 位于之后 Where

var result = await _context.SalesOrderItems.Where(x => x.SalesOrderId == SalesOrderId ).AsNoTracking().ToListAsync();

以下代码平均耗时 8.62 秒。 AsNoTracking 在 Where 之前

var result = await _context.SalesOrderItems.AsNoTracking().Where(x => x.SalesOrderId == SalesOrderId ).ToListAsync();

以下代码平均耗时 6.95 秒。没有 AsNoTracking

var result = await _context.SalesOrderItems.Where(x => x.SalesOrderId == SalesOrderId ).ToListAsync();

所以我错过了什么吗?我一直认为 AsNoTracking() 应该运行得更快,并且是只读列表的理想选择。 此表还有两个子表。

最佳答案

The first time a query is run it must be compiled. If entities are already tracked by the context, then a tracking query will return those instances rather than creating new.

这就是为什么被跟踪的实体可能比使用 AsNoTracking() 执行得更快的原因。

https://github.com/aspnet/EntityFrameworkCore/issues/14366

但是大约 7 秒的执行时间表明它没有问题/没有跟踪。这意味着数据库有问题(例如,不是索引列),如果数据设置正确,大约 15 亿条记录会在 30 毫升但几秒钟内得到。

https://stackoverflow.com/questions/56492628/

相关文章:

tensorflow - 基于直方图定义 TF 中的损失函数

laravel - 将 Laravel Vue 组件编译成不同的 js 文件

python - "pyenv virtualenvwrapper"是做什么的?

angular - 我的 Angular 应用程序的规模(缩放)在生产中单独增加

c# - 使用 AddOpenIdConnect 时,为什么要添加默认范围?

javascript - 简单的 react-spring 组件在 gatsby 中不起作用 - 元

lua - 为什么不补间位置?

reactjs - Webpack 无法导入带有 ` 标记的 React 组件

apache-spark - 加入 Spark 返回重复的隐式数据类型不匹配

javascript - 将 Uint8Array 转换为 Float32Array