我需要帮助来加快此EF LINQ查询的速度

约翰·卡伯勒

我正在使用EntityFramework 6并遇到一些主要的速度问题-该查询需要两秒钟的时间才能运行。我花了大部分时间使用LinqPad来加快查询速度,但我只能将其从4秒钟缩短到两秒钟。我尝试了分组,联接等,但是生成的SQL对我来说似乎过于复杂。我猜想我只是在使用错误的方法来编写LINQ。

这是我正在尝试做的

  1. 找到所有A地方Valid是空,AccountId是不是当前用户
  2. 确保Collectionof的当前用户B不在B哪里AccountId
  3. 将结果按其集合中A的编号B降序排列
  4. 任何A不包含的内容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最终将有大约一千万行现在B坐着50,000。

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

var filterA = this.context.A.Where(gt => gt.Valid == null && !gt.AccountId.Contains(account.Id));

var joinedQuery = from b in this.context.B.Where(gv => !gv.AccountId.Contains(account.Id))
                            join a in filterA on gv.A equals a
                            where !a.Collection.Any(v => v.AccountId.Contains(account.Id))
                            let count = gt.Collection.Count()
                            orderby count descending 
                            select new { A = gt, Count = count };

IQueryable<GifTag> output = joinedQuery
                .Where(t => t.A != null)
                .Select(t => t.A)
                .Distinct()
                .Take(20)
                .OrderBy(t => t.Collection.Count);

谢谢

胸腺素

好吧,您总是可以尝试从joinQuery中删除这两行

其中!a.Collection.Any(v => v.AccountId.Contains(account.Id))

orderby计数降序

第一行查询和订单行中的第一行已被过滤,在最后一个查询中做得很好,因此没有必要重复两次

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

加快LINQ to EF查询的速度

来自分类Dev

需要帮助加快查询速度

来自分类Dev

如何加快Linq to SQL查询的速度?

来自分类Dev

如何加快此查询的速度?

来自分类Dev

为什么此LINQ查询的速度异常慢?

来自分类Dev

EF和LINQ查询数据库速度

来自分类Dev

需要帮助来构建 linq 查询

来自分类Dev

我需要哪些索引来加快AND / OR SQL查询的速度

来自分类Dev

需要帮助以加快速度

来自分类Dev

需要帮助以加快速度

来自分类Dev

为什么添加不必要的ToList()可以大大加快LINQ查询的速度?

来自分类Dev

OrientDB:慢查询,需要帮助创建索引来加快它的速度

来自分类Dev

我需要一些帮助来优化查询

来自分类Dev

需要帮助来编写查询

来自分类Dev

我如何加快此Rcpp代码的速度?

来自分类Dev

SQL-加快查询速度

来自分类Dev

如何加快口才查询的速度?

来自分类Dev

如何使用正确的索引加快此慢速查询的速度?

来自分类Dev

如何使用别名列加快此查询的速度?

来自分类Dev

如何使用广播来加快此代码的速度?

来自分类Dev

我的angular 2应用需要花很长时间才能为首次使用的用户加载,我需要帮助以加快速度

来自分类Dev

需要帮助以了解此SQL查询

来自分类Dev

需要帮助以了解此SQL查询

来自分类Dev

在重写此查询时需要帮助

来自分类Dev

需要帮助优化此 Sql 查询

来自分类Dev

Linq查询'帮助'

来自分类Dev

需要帮助来执行mysql查询

来自分类Dev

需要帮助来创建单个Mysql查询

来自分类Dev

SQL需要帮助来建立查询