SharePoint päringute jõudlus 3: Küsi nii palju üksusi kui vajad
24.03.2010 | Gunnar
On päringuid, mille tagastatud tulemuste hulgast me kõiki tulemusi ei vaja. Tagastatavat tulemuste hulka on oluline silmas pidada, sest muidu võib tekkida olukord, kus andmebaasist küsitakse andmeid oluliselt rohkem kui meil vaja on. See tähendab jällegi protsessori ja mälu suuremat kasutust. Käesolev postitus aitab piirata ära tagastatavate üksuste arvu.
Küllaltki tihti leiab SharePoint rakendustest sellist koodi.
{
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
}
Päring küsib loendist oluliselt rohkem üksusi kui tal tegelikult vaja läheb. Näiteks 1000 üksust tagastav päring toob meile antud juhul kohale 900 üksust rohkem kui meil vaja läheb. Lahenduseks on SPQuery klassi RowLimit omadus, mis määrab päringuga tagastatavate üksuste arvu. Järgnevas näites piisab näiteks projektide listi kuvamiseks kümnest üksusest.
{
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.RowLimit = 10;
var items = list.GetItems(query);
// tee tulemustega midagi sisukat
}
Peale seda täiendust elab me kood oluliselt paremini ja serveriski peaks varasemast rahulikumaks minema.

24.03.2010 kell 11:50
Lisan siia täpsustuseks nii palju, et RowLimit on mõttekas alati päringule lisada. Ühelt poolt pidi see meeldima SQL Serverile ja teisalt aitab see vältida olukorda, kus päringu mälupuhver saab liiga suur.