我有由.NET Entity Framework 3.5(已經對EF 3.5進行了優化,我們將很快升級到4)生成的SQL語句,並在2005 SQL Server上運行。我知道有很多文章談論SQL性能,但是我沒有找到解決我的問題的具體解決方案。 我需要這種情況的參考或解決方案: 在ASP.NET應用程序中有一個包含特定信息(類似6-7列)的表,當用戶對錶執行排序操作時,需要7 -15秒來檢索信息(...由於應用程序是業務內部的,這是糟糕的表現)。SQL語句性能審查
我跑usp_Worst_TSQL從文章: http://www.databasejournal.com/features/mssql/article.php/3802936/Finding-the-Worst-Performing-T-SQL-Statements-on-an-Instance.htm和我得到表現在哪裏的問題來自於:有使用多個嵌套查詢的WHERE,INNER & LEFT JOIN和ORDER BY子句。
創建有關語句中的SQL語句子句的索引有哪些注意事項? 什麼時候需要製作複合索引?
編輯: 我設法從問題出在哪裏。我有這個LINQ和foreach循環中的代碼,這需要3個全秒獲得數據:
foreach (string status in searchObj.Statuses)
{
from f in tblFormsQO
where f.tblFormStatus.Count > 0 && f.tblFormStatus.Count(s => s.StatusDate == null) == 0
&& f.tblFormStatus.OrderByDescending(s => s.StatusDate).FirstOrDefault().CurrentStatus.CodeDesc == status
select f
}
現在,f是不是一個大的實體(我的確有它的所有屬性)。 有什麼辦法可以讓它表現更好?
這是一種需要勇氣寫答案的問題。從EF中生成的SQL與性能問題混合在一起,而不是句子中的代碼示例。 – danihp
你的問題沒有提供很多範圍的答案,但我會建議,如果它採取7-15s執行查詢,它可能不會寫得很好。索引可能會提高性能,但是您應該仔細查看查詢實際上嘗試嵌套的內容。我寫了一張備忘單,以便從EF Performance中獲得最佳效果,可在此處獲得:http://blog.staticvoid.co.nz/2012/08/entity-framework-performance-cheat-sheet.html。我建議你在橙色框 –
是的,我知道,我會編輯問題... :-) ...問題是生成的查詢太長,我想我需要3個問題只是爲了顯示查詢的重要部分... – lionheart