0

我正在为 MySQL 和实体框架使用 Pomelo.EntityFrameworkCore.MySql 提供程序。

我有一个使用 LINQ 和 EF 的复杂动态生成的查询:

// Shortened for brevity
IQueryable<Account> accountQuery = db.Accounts.AsNoTracking()

foreach (var filter in filters)
{
     IQueryable<Account> subQuery = CreateSubQuery(filter);
     accountQuery = accountQuery.Where(aq => !subQuery.Select(a => a.Id).Contains(aq.Id));
}

accountQuery.Count(); // The slow part

本质上,主查询排除了任何子查询中的所有帐户 ID。

如果我在 SQL 中运行原始查询,则需要 2 分钟。如果我唯一更改的是将 STRAIGHT_JOIN 添加到原始查询中,则只需几秒钟。我猜它告诉优化器按顺序运行查询而不是尝试优化。

那么如何将等效的 STRAIGHT_JOIN 添加到 LINQ 查询中......?

4

0 回答 0