优化 LINQ 查询 - 如何缩短执行时间?

2024-06-03

我想知道是否有一个好的方法来优化我的 LINQ 查询。我正在使用类似于以下内容的 LINQ 查询从数据库检索数据:

// PKs is a list of integers   
var import = context.table.Where(x => PKs.Contains(x.PrimaryKey)).AsEnumerable();

我(错误地)假设这会导致如下所示的 SQL 调用:

SELECT * from table where PrimaryKey in (PK[1], PK[2], ...)

即 1 个数据库命中。使用Glimpse http://getglimpse.com/为了检查 SQL 调用,我发现 LINQ 查询被转换为许多单独的 SQL 调用,例如:

SELECT * from table where PrimaryKey=PK[1]
SELECT * from table where PrimaryKey=PK[2]
...

各个查询的执行速度非常快,但由于我的整数列表很大(数千个),开销造成的偏移导致查询需要大约 25 秒才能运行。

我决定通过数据库调用去除耗时的 LINQ 查询,并通过存储过程调用导入数据:

var import = this.p_import(parameter).ToList();

由于只有一次数据库调用,这极大地缩短了响应时间,从大约 25 秒缩短到不到 1 秒。

这解决了我的问题,但我使用 LINQ 的全部原因是为了避免使用存储过程。有没有更好的方法可以优化 LINQ 查询?


如果改成join,事情应该会顺利很多。

context.table.Join(PKs,t => t.PrimaryKey, pk => pk, (t, pk) => t).AsEnumerable()

Linq2Sql 不支持将实体连接到 POCO 列表,但刚刚使用 EF 进行了测试,一切都很好。

使用 Linq2Sql,您将陷入困境Contains,在这种情况下,我可能只会选择带有表值参数的存储过程。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

优化 LINQ 查询 - 如何缩短执行时间? 的相关文章

随机推荐