所以我有一个列表,其中包含数万个项目,我需要在使用 SPServices 时执行查询。阈值设置为 8,000,所以我对此有疑问。
到目前为止,我已经尝试通过将项目放入文件夹和索引列来优化列表,我将在查询中使用它们。
看起来让它工作的唯一真正技巧是通过正确索引列:但是即使列被索引我仍然有问题:
如果我索引列“Keyword1”和“Keyword2”,如果我在查询中只使用其中一个字段,我可以很好地查询列表,但是只要我将它们都包含在我的 Where 子句中,并使用 Or谓词,我得到阈值错误。
这里的最后几句话突出了问题http://msdn.microsoft.com/en-us/library/ff798465.aspx “在这种情况下,您可以通过为标题字段编制索引来避免该问题。这将使 SharePoint 能够确定索引中按标题排序的前 100 个项目,而无需扫描数据库中的所有 10,000 个列表项目。适用的相同概念排序操作也适用于列表查询中的 where 子句和连接谓词。谨慎使用列索引可以缓解许多大型列表性能问题,并帮助您避免查询限制。”
如何以可以执行更复杂查询的方式对列进行索引,例如,
<Query><Where><Or><Eq><FieldRef Name='Keyword1' /><Value Type='Text'>TEST1</Value></Eq><Eq><FieldRef Name='Keyword2' /><Value Type='Text'>TEST2</Value></Eq></Or></Where></Query>
我尝试了很多选择。我认为有前途的方法是通过在查询中指定 ViewName 或 FolderName 来查询各个文件夹,但这似乎并没有绕过阈值错误..
有任何提示或替代方案吗?
最佳答案
您是否尝试过将列表阈值增加到更高的值?
解决方法是“通过将 SPList.EnableThrottling 属性设置为 false 来覆盖单个列表的 ListView 阈值。
private static void DisbaleListThrottling()
{
using (SPSite spSite = new SPSite("http://YourSiteNameHere.com/TeamSite/"))
{
using (SPWeb spWeb = spSite.OpenWeb())
{
SPList spList = spWeb.Lists["MyList1"];
spList.EnableThrottling = false;
spList.Update();
}
}
}
你也可以使用 powershell:-
$web = Get-SPWeb http://whateverWeb
$list = $web.Lists[“List Title”]
$list.enablethrottling = $false
$lst.update()
关于javascript - 使用 SPServices 查询大型列表并避免 ListView 阈值...功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16021588/