ASP/Vbscript/mssql:
Jeg har en webside, der viser et antal records, 20 af gangen pr side.
Men den tager laaang tid, når der er mange records.
Hvis jeg kører queriet direkte i enterprise manager gui'et, kommer
resultatet "øjeblikkeligt"
Jeg har benchmarket det, ved at bruge timer-funktionen, og udskrive tiden
efter hver sætning, og fundet ud af, at det er "PageCount = Rs.PageCount",
der tager tid,
Start: 0.0
Rs.Open Sql, Conn, 1 0.031s
ir rs.eof then
...
end if 0.043s
RS.PageSize = 20 0.043s
Rs.AbsolutePage = Page 0.043s
RecCount = Rs.PageSize 0.043s
PageCount = Rs.PageCount 17.512s !!!!
Fjerner jeg den sætning, så er det
Response.Write "Antal: "&Rs.RecordCount
der tager tid.
Samtidig kunne jeg se, at cpu-forbruget steg til over 50%, mens det query
kørte.
Tiden er nogenlunde 0.01 sec per record, og det løber op, når der er 2000
records i resultat-sættet.
Som test, fjernede jeg også den sætning med rs.RecordCount, og antog at der
var 100 sider i resultatet, og så pager den fint, med at lave hele tabellen
på 0.047s !!
Så løsningen er at lave to queries, et der er "select count (*) as antal
from ...." og et andet, der finder selve data.
(Denne mail startede som et spørgsmål, men som ofte sker, når man prøver at
forklare problemet i detaljer for andre, så finder man selv løsningen. Og
den løsning vil jeg da gerne have arkiveret for eftertiden
)