3

所以我有一个列表,其中包含数万个项目,我需要在使用 SPServices 时执行查询。阈值设置为 8,000,所以我对此有疑问。

到目前为止,我已经尝试通过将项目放入文件夹并索引我将在查询中使用的列来优化列表。

似乎让它工作的唯一真正技巧是正确索引列:但是即使列索引我仍然有问题:

如果我索引列“Keyword1”和“Keyword2”,如果我只在查询中使用其中一个字段,我可以很好地查询列表,但是只要我将它们都包含在带有 Or 谓词的 Where 子句中,我得到阈值误差。

这里的最后几句话突出了问题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 来查询各个文件夹,但这似乎并没有绕过阈值错误。

任何提示或替代方案?

4

1 回答 1

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()
于 2014-03-28T07:46:16.540 回答