首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在SharePoint2010中,GetItemByID对于非特权用户的大列表速度非常慢,而对于站点管理员来说速度非常快

在SharePoint2010中,GetItemByID对于非特权用户的大列表速度非常慢,而对于站点管理员来说速度非常快
EN

Stack Overflow用户
提问于 2013-10-28 17:11:49
回答 1查看 832关注 0票数 0

我有一个很大的列表(大约20000个项目)和内部调用方法SPList.GetItemById(id)的标准SharePoint2010显示表单。此方法执行sql查询,从内容数据库中通过id获取项目。

问题在于,对于非特权用户,SPList.GetItemById(id)方法的执行时间是站点管理员的10-20倍。因此,对于非特权用户,打开显示表单需要10秒,而对于站点管理员,打开显示表单需要不到1秒。

在分析器的帮助下,我发现瓶颈在于Sharepoint 2010为非特权用户构建的SQL-query。

对于非特权用户和站点管理员,SQL查询是不同的。

您能否建议一些解决方案或解决方法来提高非特权用户的性能?

我使用标准的SharePoint2010显示表单,所以我不能用其他更快速的方法替换SPList.GetItemById(id)方法。

它可能会有一些帮助:非特权用户的SQL查询有一些额外的连接到站点管理员:

代码语言:javascript
运行
复制
INNER JOIN (SELECT CAST(val AS uniqueidentifier) AS InValues
FROM dbo.fn_UnpackCsvString(@L3TXP) ) AS Scopes ON (t1.ScopeId = Scopes.InValues)

LEFT OUTER JOIN (SELECT * FROM AllUserData AS t32_u 
WITH(NOLOCK,INDEX=AllUserData_PK) INNER JOIN Docs AS t32_d 
WITH(NOLOCK) ON (t32_d.DoclibRowId =t32_u.tp_ID  AND
t32_u.[tp_CalculatedVersion] = 0  AND
t32_u.[tp_DeleteTransactionId] = 0x  AND
t32_u.[tp_IsCurrentVersion] = CONVERT(bit,1) ) AND
(t32_d.SiteId=t32_u.tp_SiteId) AND
(t32_d.SiteId = @SITEID) AND
(t32_d.ParentId = t32_u.tp_ParentId) AND
(t32_d.Id = t32_u.tp_DocId) AND
( (t32_u.tp_Level = 1) ) AND
(t32_d.Level = t32_u.tp_Level) AND
(t32_d.IsCurrentVersion = 1) AND
(t32_d.Level = 1 OR t32_d.Level =  2) 
INNER JOIN (SELECT CAST(val AS uniqueidentifier) AS InValues 
FROM dbo.fn_UnpackCsvString(@L3TXP) ) AS Scopes ON
(t32_d.ScopeId = Scopes.InValues)) AS t32 ON
(t32.[tp_ListId] = @L2) AND

where表文档为t1

EN

回答 1

Stack Overflow用户

发布于 2013-10-30 14:16:17

需要指出的是,列表中的每个项目都有自己的权限集。

所以看起来像是SharePoint performance degradation with a large number of unique security scopes in lists

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19630800

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档