所以我有一个列表,其中包含数万个项目,我需要在使用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来查询单个文件夹,但这似乎没有绕过阈值错误..
任何提示或替代方案?
答案 0 :(得分:1)
您是否尝试将列表阈值增加到更高的值?
解决方法是通过将SPList.EnableThrottling属性设置为false来覆盖单个列表的列表视图阈值。
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()