2013-04-15 61 views
3

因此,我有一個列表中將有數以萬計的項目,我將需要使用SPServices執行查詢。閾值設置爲8,000,所以我遇到了問題。使用SPServices查詢大型列表並避免列表視圖閾值...功能

到目前爲止,我已經嘗試通過將項目放入我將用於查詢的文件夾和索引列中來優化列表。

看來,唯一真正的把戲得到它的工作是正確索引列:但是即使索引我仍然有問題列:

如果我索引中的列「關鍵字」和「關鍵字2」我可以查詢列表就好了,如果我只在查詢中使用這些字段中的一個,但只要我在Where子句中使用Or謂詞包含它們,就會發生閾值錯誤。

這裏的最後兩句,亮點問題http://msdn.microsoft.com/en-us/library/ff798465.aspx「在這種情況下,你可能會避免通過索引標題字段的問題。這將使的SharePoint確定前100的項目從索引標題排序未掃描全部10000個在數據庫中列出項目適用於排序操作的相同概念也適用於列表查詢中的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> 

我已經嘗試了很多的選擇。我認爲有希望的是通過在查詢中指定查看名稱或文件夾名稱來查詢單個文件夾,但似乎沒有獲得閾值錯誤。

任何提示或替代方法?

回答

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

謝謝你剛剛救了我幾個小時的頭痛 – Woodsy