我想知道是否有一种很好的方法来优化我的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个数据库,我从数据库中使用类似于下面的LINQ查询检索数据击中。使用Glimpse检查我看到LINQ查询被翻译成许多独立的SQL调用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查询?
可以使用'context.table.Where(X => x.PrimaryKey == PK [1] || x.PrimaryKey == PK [2])AsEnumerable();' – progpow
它传递数千个对象作为qurery的命令参数是错误的。你应该把它们放在一个单独的表格中,索引列并进行有效的连接。 – AgentFire
PK的内容从哪里来? – spender