需要一些帮助才能解决此错误:
查询处理器耗尽了内部资源而无法使用 制定查询计划。这是一个罕见的事件,只有预期 非常复杂的查询或引用非常大的查询 表或分区的数量。请简化查询。如果你 相信您错误地收到了此消息,请联系客户 支持服务以获取更多信息。
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上出现一些性能问题有什么问题。
我需要一些帮助来避免此类错误并重新编写此SQL查询而不使用UNION
。
提前致谢。
答案 0 :(得分: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))
)
);