[英]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.