在 Sitecore 工作箱中(Sitecore.Shell.Applications.Workbox)
,在DisplayStates(IWorkflow workflow, XmlControl placeholder)
方法中,Sitecore 使用以下方法来检索处于特定工作流状态的项目。
DataUri[] items = this.GetItems(state, workflow);
在我们的主数据库中,大约有 650,000 项要查询。加载 Workbox 大约需要 1.5 分钟。我使用 dotpeek 查看了“this.GetItems(state, workflow)”方法内部发生了什么。
在内部,它构建了以下查询,该查询在主数据库中运行了 1.5 分钟(从 650,000 多个项目中选择 36 个项目),
SELECT *
FROM VersionedFields INNER JOIN Items ON VersionedFields.ItemId = Items.Id
WHERE ItemId IN (SELECT ItemId FROM SharedFields WHERE FieldId=Workflowengine field AND Value= workflowengine)
AND FieldId=workflow state AND Value= workflowstate value
ORDER BY Name, Language, Version
有没有办法提高 Workbox 的性能?