Nella casella di lavoro Sitecore, (Sitecore.Shell.Applications.Workbox)
, nel metodo DisplayStates(IWorkflow workflow, XmlControl placeholder)
, Sitecore utilizza il seguente metodo per recuperare gli elementi in un determinato flusso di lavoro.Risolvi il problema delle prestazioni della cassetta di lavoro Sitecore
DataUri[] items = this.GetItems(state, workflow);
Nel nostro database principale ci sono circa 650.000 articoli da interrogare. Per caricare la casella di lavoro ci vogliono circa 1 minuto e mezzo. Ho dato un'occhiata a cosa succede all'interno del metodo "this.GetItems (state, workflow)" usando dotpeek.
Internamente costruisce la seguente query che ha avuto 1 minuto e mezzo per l'esecuzione nel database master (selezionare 36 articoli da 650,000+ articoli),
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
Esiste un modo per migliorare le prestazioni in Workbox?
È possibile aggiungere un indice alla tabella di SQL sul campo ItemID (se non è già presente). Questo potrebbe accelerare le cose. –
+1 domanda ben studiata. –