我正在使用EntityFramework 6并遇到一些主要的速度问题 - 这个查询需要两秒钟才能运行。我花了大部分时间使用LinqPad来加速查询,但我只能将它从4秒减少到2秒。我尝试过分组,连接等,但生成的SQL看起来过于复杂了。我猜我只是采取了错误的方法来编写LINQ。
以下是我正在尝试做的事情
A
为空Valid
且AccountId
不是当前用户的所有Collection
B
的{{1}}不包含任何B
,其中AccountId
是当前用户A
合并中B
的数量A
的{{1}}都应该在返回结果的末尾。我需要看起来像这样的模型:
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
由于
答案 0 :(得分:1)
你总是可以尝试从joinQuery中删除这两行
where!a.Collection.Any(v =&gt; v.AccountId.Contains(account.Id))
和
按顺序递减
第一行已经在第一个Query中被过滤掉了 和订单行一样,做好最后一个查询的排序,这样做两次没有意义