繁体   English   中英

由于SQL查询导致SQL Server性能问题

[英]Performance issue with SQL server due to sql query

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

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

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情况下重新编写此SQL查询。

提前致谢。

另请注意,默认情况下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))
                   )
                );

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM