webForumDet fria alternativet

Getrows söligare?

13 svar · 199 visningar · startad av brw

brwMedlem sedan juli 2000619 inlägg
#1

Har lite funderingar kring getrows...

När jag kör följande får jag bara ut ingressen..
men hur fan vet jag i vilken ordning värdena kommer ?
Jag får ju inte ut datumreg tex.

är det efter upplägget i databasen eller hur fungerar denna funktion?

är jag helt ute och cyklar?

Följande kod får resultatet 125 ms

<% 
OPTION EXPLICIT 
Dim Connection, SQL, RS, arr, i, DTESTART
%>

<!--#include file="incfiles/databas.inc"-->

<%
SQL = "Select * FROM nyheter ORDER BY datumreg ASC"
Set RS = Connection.Execute(SQL)

dteStart = Timer()
arr = RS.GetRows()

For i = 0 to ubound(arr,2)
Response.Write "Ingress:<br>" & arr(1, i) & "Datumreg:<br>" & arr(2, i) & "<br><br>"
Next

RS.Close
Set RS = Nothing
Connection.Close
Set Connection = Nothing

Response.Write FormatNumber((Timer() - dteStart)*1000,0) & " ms."
%>

Följande kod får resultatet 63 ms

<% 
OPTION EXPLICIT 
Dim Connection, SQL, RS, arr, i, DTESTART
%>

<!--#include file="incfiles/databas.inc"-->

<%
SQL = "Select * FROM nyheter ORDER BY datumreg ASC"
Set RS = Connection.Execute(SQL)

Do until RS.EOF 
Response.Write RS("ingress") & "<br><br>" 
RS.Movenext
Loop

RS.Close
Set RS = Nothing
Connection.Close
Set Connection = Nothing

Response.Write FormatNumber((Timer() - dteStart)*1000,0) & " ms."
%>

Ska inte get rows vara snabbare eller?

------------------
Ingenting är omöjligt, bara en utmaning.

LarsGMedlem sedan dec. 200012 464 inlägg
#2

Jo, men det hänger ihop med hur mycket data du ska hämta och vilken cachesize ado har.

Desto mer data, desto mer fördelaktigt att använda getrows har jag förstått.

red:

Vart sätts dtestart i ditt andra exempel?
------------------
essentitia preter non sans multiplicandum

[Redigerat av LarsG den 29 aug 2001]

brwMedlem sedan juli 2000619 inlägg
#3

Men... ska man då köra en if-sats..

If data > 1000 poster Then
kör Getrows
Else
kör vanlig loop
End If

känns ju inte som om man vet exakt hur mycket data det rör sig om.. i det här fallet var det ju inte så jävla märkbar skillnad..

------------------
Ingenting är omöjligt, bara en utmaning.

brwMedlem sedan juli 2000619 inlägg
#4

Det sätts nedanför denna rad:
Set RS = Connection.Execute(SQL)

men jag glömde klistra med den här ;)

Men i getrows.. hur vet jag vilka värden jag får ut.. jag får ju inte med datumreg mm.. i vilken ordning kommer dom.. jag kan ju inte specificera typ Select ingress, datumreg osv.. då fungerar det ju inte?

------------------
Ingenting är omöjligt, bara en utmaning.

[Redigerat av brw den 29 aug 2001]

LarsGMedlem sedan dec. 200012 464 inlägg
#5

Tror nog att det är ok att använda getrows i de flesta fall.

Du kan ju använda den vanliga metodiken om du ställer en fråga som


select top 10 * from t order by c desc
'eller
select * from t where unikkolumn='v'

------------------
essentitia preter non sans multiplicandum

LarsGMedlem sedan dec. 200012 464 inlägg
#6

Men i getrows.. hur vet jag vilka värden jag får ut.. jag får ju inte med datumreg mm.. i vilken ordning kommer dom.. jag kan ju inte specificera typ Select ingress, datumreg osv.. då fungerar det ju inte?

Jo, det skall gå att skriva


select c3,c1,c2 from t

och sedan använda getrows. Kolumnerna kommer i samma ordning som i select-listan.

------------------
essentitia preter non sans multiplicandum

brwMedlem sedan juli 2000619 inlägg
#7

Jag provade på en annan tabell innehållande drygt 52000 poster

fick följande:
med getrows 11 109 ms
och med vanlig loop 17 344ms

verkar ju vara lite skillnad

är det den snabbaste metoden ?

------------------
Ingenting är omöjligt, bara en utmaning.

brwMedlem sedan juli 2000619 inlägg
#8

Om jag specificerar vilka kolumner som ska visas så får jag felet:

Subscript out of range: [number2]

I ett tidigare inlägg skrev Vide att man måste ange vilken dimension man ska använda i ubound.. vad är det?

är det ,2 och om jag ska ha flera poster tex 4 .. blir det ,4 vid ubound eller vafan? :q

------------------
Ingenting är omöjligt, bara en utmaning.

LarsGMedlem sedan dec. 200012 464 inlägg
#9

Snabbaste metoden är att undvika ADO/VB-script överhuvudtaget och skriva en komponent direkt mot OLE DB/ODBC. Annars så är väl getrows det bästa.

Getrows returnerar alltid en tvådimensionell array.

arr = rs.getrows()
rows = ubound(arr,2)
'antal rader
cols = ubound(arr,1)
'antal kolumner

------------------
essentitia preter non sans multiplicandum

brwMedlem sedan juli 2000619 inlägg
#10

ok nu är jag med lite iaf.. håller på och testar som fan.. men det verkar itne gå att skriva ut posternas ID?

hur fan gör man det?

jag kan heller itne köra typ

select ip, datumreg, sida utan jag måste
specificera id, ip, datumreg, sida då går det.. och då kan jag ändra på ordningen på dem..

när jag skriver ut med arr(1,i) osv.. men id borde ju hamna på första plats... men det gör den inte?

------------------
Ingenting är omöjligt, bara en utmaning.

LarsGMedlem sedan dec. 200012 464 inlägg
#11

Arrayindex börjar på 0. Det är kanske därför du tappar bort ett fält?

Har du memo eller motsvarande som datatyp? I så fall brukar ordningen ha betydelse såtillvida att man måste ha dessa fält sist och i samma ordning som de är definierade. Annars så skall det inte vara något problem.

------------------
essentitia preter non sans multiplicandum

brwMedlem sedan juli 2000619 inlägg
#12

Ah.. du har så rätt.. tänkte inte på att de börjar på 0 :)

Går getrows att använda när man typ kör sökning i databasen eller vilket är snabbast och bäst då? typ vid likesökning.. :q

------------------
Ingenting är omöjligt, bara en utmaning.

brwMedlem sedan juli 2000619 inlägg
#13

Kan nu meddela följande prestandaskillnad:

Att hämta 75770 poster med Getrows och alla variablar deklarerade tog: 28 418 ms

samma fast utan deklarerade variablar 31 969 ms

Sen vanlig do until rs.eof blev med deklarerade variablar: 53595 ms och utan dekl. variablar: 53 984 ms

en j-vla skillnad med andra ord :)

------------------
Ingenting är omöjligt, bara en utmaning.

LarsGMedlem sedan dec. 200012 464 inlägg
#14

Vilken typ av sökning du gör har ingen betydelse för getrows, utan det är antal rader i resultatet som avgör.

Som sagt, du kan nog använda getrows alltid. Även om det kan bli något långsammare vid små datamängder så är det absolut sett väldigt små skillnader.

------------------
essentitia preter non sans multiplicandum

135 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)