我需要帮助加快这个EF LINQ查询

时间:2014-09-24 05:41:05

标签: c# linq entity-framework

我正在使用EntityFramework 6并遇到一些主要的速度问题 - 这个查询需要两秒钟才能运行。我花了大部分时间使用LinqPad来加速查询,但我只能将它从4秒减少到2秒。我尝试过分组,连接等,但生成的SQL看起来过于复杂了。我猜我只是采取了错误的方法来编写LINQ。

以下是我正在尝试做的事情

  1. 查找A为空ValidAccountId不是当前用户的所有Collection
  2. 确保B的{​​{1}}不包含任何B,其中AccountId是当前用户
  3. 按照降序排列A合并中B的数量
  4. 任何没有A的{​​{1}}都应该在返回结果的末尾。
  5. 我需要看起来像这样的模型:

    B

    public class A { public int Id { get; set; } public bool? Valid { get; set; } public string AccountId { get; set; } public virtual ICollection<B> Collection { get; set; } } public class B { public int Id { get; set; } public bool Valid { get; set; } public string AccountId { get; set; } public DateTime CreatedDate { get; set; } public virtual A Property { get; set; } } 的表格大约有一百万行,而A最终会有一千万左右。现在B坐在50,000。

    以下是查询目前的样子。它给了我预期的结果,但我必须多次运行B并执行其他不必要的步骤:

    orderby

    由于

1 个答案:

答案 0 :(得分:1)

你总是可以尝试从joinQuery中删除这两行

where!a.Collection.Any(v =&gt; v.AccountId.Contains(account.Id))

按顺序递减

第一行已经在第一个Query中被过滤掉了 和订单行一样,做好最后一个查询的排序,这样做两次没有意义