1

需要一些帮助来解决此错误:

查询处理器用尽了内部资源,无法生成查询计划。这是一个罕见的事件,仅适用于极其复杂的查询或引用大量表或分区的查询。请简化查询。如果您认为您错误地收到了此消息,请联系客户支持服务以获取更多信息。

SQL 查询:(我只是放了一个查询。我运行了 9 个这样的查询)

var query1 = from article in _db.Articles
             from scl in article.Scls
             where article.publishDate < DateTime.Now
                && article.removalDate > DateTime.Now
                && article.finished == true
                && article.flagged== true
                && listOfScl.Contains(scl.id)
             select article;

var query2 = from article in _db.Articles
             from com in article.Coms
             where article.publishDate < DateTime.Now
                && article.removalDate > DateTime.Now
                && article.finished == true
                && article.flagged== true
                && listOfCom.Contains(com.id)
             select article;

query = (query1.Union(query2)).Distinct();

不知道查询它的工作正常但在 SQL Server 上出现一些性能问题有什么问题。

我需要一些帮助来避免此类错误并在不使用UNION.

提前致谢。

4

1 回答 1

1

另请注意,默认情况下 LINQ 执行 UNION,这将消除重复,因此不需要 Distinct,这可能会提高性能。

“在不使用 UNION 的情况下重新编写此 SQL 查询。”。这怎么样?

var query1 = from article in _db.Articles
             from scl in article.Scls
             where article.publishDate < DateTime.Now
                && article.removalDate > DateTime.Now
                && article.finished == true
                && article.flagged== true
                && ( 
                     listOfScl.Contains(scl.id)
                     || listOfCom.Contains(com.id) 
                   )
             select article;

你可以试试这个的表现,这样你就不需要一个独特的。但是它会涉及一个子查询,所以很难说没有测试什么会表现得更好:

var query1 = _db.Articles.Where(article => article.publishDate < DateTime.Now
                && article.removalDate > DateTime.Now
                && article.finished == true
                && article.flagged== true
                && ( article.Scls.Any(s=> listOfScl.Contains(s.id))
                     || article.Coms.Any(c=> listOfCom.Contains(c.id))
                   )
                );
于 2013-04-09T21:05:02.270 回答