SharePoint päringute jõudlus 2: Küsi ainult need väljad, mida reaalselt vajad
23.03.2010 | Gunnar![]()
SharePoint kasutab päringute tegemiseks SPQuery tüübist objekti. Selle abil saab ära kirjeldada nii päringu enda kui ka piiratud koguse päringu sooritamist juhtivaid omadusi. Käesolevas postituses vähendame päringutele kuluvat mälumahtu sel teel, et küsime ainult need väljad, mida me päringu tegemise kohas reaalselt vajame.
Vaatame korra järgmist CAML-päringut, mis tagastab projektide loendist kõik projektid, mille tellijaks on firma ID-ga 12.
{
var list = SPContext.Current.CurrentWeb.Lists["Projects"];
var query = new SPQuery();
query.Query = "<Where><Eq>";
query.Query +="<FieldRef Name='Company' LookupId='True' />";
query.Query += "<Value Type='Lookup'>12</Value></Eq></Where>";
var items = list.GetItems(query);
// tee tulemustega midagi sisukat
}
Meil on vaja projektidest koostada lihtne loend ja selleks piisab meile ideaalselt sellest, kui päring tagastab üksuste pealkirja, ID ja projekti alustamise kuupäeva. Me ei soovi loendi koostamiseks laadida mällu näiteks projektide kirjeldusi, mis on piiramata pikkusega ja muid välju, mis võivad samuti mahukateks osutuda.
SPQuery klassil on sellise soovi täitmiseks olemas omadus nimega ViewFields. ViewFields omadusele saab omistada CAML-i, mis määrab väljad, mille päring meile kindlasti tagastama peab. Järgnev kood ütleb SharePointile, et me soovime saada tagasi ainult ID, Title ja ProjectStart väljad.
{
var list = SPContext.Current.CurrentWeb.Lists["Projects"];
var query = new SPQuery();
query.Query = "<Where><Eq>";
query.Query +="<FieldRef Name='Company' LookupId='True' />";
query.Query += "<Value Type='Lookup'>12</Value></Eq></Where>";
query.ViewFields = "<FieldRef Name='ID' />";
query.ViewFields += "<FieldRef Name='Title' Nullable='True' />";
query.ViewFields += "<FieldRef Name='ProjectStart' Nullable='True' />";
var items = list.GetItems(query);
// tee tulemustega midagi sisukat
}
Sellega on tulemus saavutatud. Loenditest, kus on palju välju on päringuid kõige mõttekam teha ainult nende väljadega, mida me reaalselt vajame.
FieldRef elementides tuleb välja nimeks anda välja sisemine nimi (InternalName).
Väike mind shift on siinkohal oluline: SPQuery loomisel on meil lisaks päringule alati vaja üle vaadata ka väljad, mida see tagastab.

24.03.2010 kell 09:54
Minu meelest peaks sellist lähenemist de facto kasutama, et küsitakse ainult need väljad mida realselt vajatakse
24.03.2010 kell 10:17
Just nimelt - peaks