我爲我的公司構建了文檔管理系統。桌面應用程序連接到作爲Azure Web App託管的ASP.Net Web API,該應用程序連接到Azure SQL數據庫。SQL Azure上查詢性能緩慢
由於我的數據庫已經變得越來越多,它開始顯着減慢,所以我需要幫助做這樣的查詢優化。這裏是目前導致我問題的Linq查詢。基本上,這個查詢捕獲所有從數據庫中的項目,然後在我的桌面應用程序填充列表
var projects = (from p in db.Projects.Include(c => c.ProjectType)
select new
{
ID = p.ID,
HasSubProjects = (db.Projects.Where(u => u.ParentProjectID == p.ID).Count() > 0) ? 1 : 0,
ParentProjectID = p.ParentProjectID,
Name = p.Name,
Description = p.Description,
DateLastEdited = p.DateLastEdited,
DateCreated = p.DateCreated,
ProjectTypeID = p.ProjectTypeID,
LastEditedByGoesby = p.LastEditedByGoesby,
ProjectComponentSecurityType = p.ProjectComponentSecurityType,
ClonedFrom = p.ClonedFrom,
DateAnyVersionLastEditedByUser = p.DateAnyVersionLastEditedByUser,
DateAnyVersionLastEdited = p.UserProjectActivityLookups
.OrderByDescending(u => u.LastActivityDate)
.Select(v => v.LastActivityDate)
.FirstOrDefault(),
// p.DateAnyVersionLastEdited,,
ProjectType = p.ProjectType
}).ToList()
.Select(x2 => new Project
{
ID = x2.ID,
HasSubProjects = x2.HasSubProjects,
ParentProjectID = x2.ParentProjectID,
Name = x2.Name,
Description = x2.Description,
DateLastEdited = x2.DateLastEdited,
DateCreated = x2.DateCreated,
ProjectTypeID = x2.ProjectTypeID,
LastEditedByGoesby = x2.LastEditedByGoesby,
ProjectComponentSecurityType = x2.ProjectComponentSecurityType,
ClonedFrom = x2.ClonedFrom,
DateAnyVersionLastEditedByUser = x2.DateAnyVersionLastEditedByUser,
DateAnyVersionLastEdited = x2.DateAnyVersionLastEdited,
ProjectType = x2.ProjectType
});
;
如何優化這一點,避免與此相關的查詢問題,更好地創建索引,或者使用標準程序等是否有任何想法有幫助。我正在尋找這個特定查詢的方向,但也有關於如何提高其他查詢性能的指導以及如何去做。
謝謝。
那麼,通常的想法是問問數據庫的查詢計劃。從那裏可以很容易地發現缺失的索引。 – Joey
你在什麼Azure SQL數據庫服務層/性能級別?這是基本的嗎? – ajg
數據庫包含多少條目?在某個時間點(或者DB填充級別),應用程序無法將全部內容加載到內存中,而不管索引。然後,您需要在應用程序級別更改策略,例如通過分頁或按需加載列表和UI元素。 – Christoph