簡體   English   中英

使用SPServices查詢大型列表並避免列表視圖閾值...功能

[英]Using SPServices to query large lists and avoiding the List View Threshold… feature

所以我有一個列表,里面有數以萬計的項目,我需要在使用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來覆蓋單個列表的列表視圖閾值。

  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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM