webForumDet fria alternativet

Segt med RS i MSSQL?

ASP

6 svar · 360 visningar · startad av dekt

Medlem sedan jan. 2001101 inlägg
Frågan#1

När jag bytte från Access till MS SQL-server 2000, gick plötsligt webbsidan mycket långsammare. En lista som skulle hämtas tog 10 sekunder istället för 1 sekund att hämta.

Jag kör enligt metoden

 Set objRS = objConn.Execute("SELECT...")
Do Until objRS.EOF
 Response.Write Bla
 objRS.MoveNext
Loop
Set objRS = Nothing

Jag mailade supporten på webbhotellet, som svarar:

Man kan anropa datan i en sql databas på två olika sätt ett sätt är att man loopar igenom alla poster som man brukar göra i en accessbas, detta sättet tar längre tid än på en sql server och är inte korrekt. Det andra är att fråga sqlen efter just den posten en sql query fråga och det är det korrekta sättet. Så kolla skripten så ni inte använder de mer enkla access sättet.

Vad menas med detta? (Supporten är långsam på att svara) Och vilket är det bästa sättet att hämta data egentligen?

Medlem sedan apr. 20031 660 inlägg
#2

HEJ!

Intressant fråga, lyfter upp den!

Vet hotellet vad de pratar om? För mig verkar det som att det första de menar är "hämta allt utan WHERE", den andra är "WHERE id=1", dvs många poster eller en post.

Givetvis ska man kunna ställa båda frågorna, det är ju grundläggande!

Har du andra webbar där, går alla frågor lika långsamt, har du rätt anslutning etc är de kompletterande frågorna jag ställer.

Medlem sedan feb. 200112 078 inlägg
#3

Om inte din fråga var väldigt luddig eller om den där supportpersonen inte missförstod dig, så råder jag dig till att tala med den personens chef och ifrågasätta dennes kompetens och även vidare anställning på bolaget i fråga. Svarar man så på den där där frågan, så bör man nog börja med något annat yrke.

Kan du visa exakt vilken kod det är som beter sig olika mellan Access/MSSQL?

Medlem sedan jan. 2001101 inlägg
#4

Alltså det var ingen speciell kod, utan en helt vanlig SELECT-sats från en tabell och en Do-Loop med MoveNext som skriver ut allt.

MEN.. jag bytte och körde med GetRows, stängde databaskopplingen och körde med den array man får. Då gick tiden ner från 10 sekunder till 1 sekund! :)

Medlem sedan juni 200032 967 inlägg
#5

Det ska inte spela någon roll.

Vad är det för webhotell som har en supportavdelning som svarar på det sättet?

Medlem sedan feb. 200112 078 inlägg
#6

dekt skrev:

MEN.. jag bytte och körde med GetRows, stängde databaskopplingen och körde med den array man får. Då gick tiden ner från 10 sekunder till 1 sekund! :)

Du gjorde alltså en 90%-ig prestandaökning genom att använda GetRows? Det tror jag inte på. Det måste ha varit något annat med i bilden.

Hur många rader gäller det? Hur många kolumner skriver du ut?

Medlem sedan dec. 1999707 inlägg
#7

Testa att hämta recordset:et disconnected, om det inte redan görs.

'---- CursorTypeEnum Values ----
Const adOpenForwardOnly = 0
Const adOpenKeyset = 1
Const adOpenDynamic = 2
Const adOpenStatic = 3

'---- LockTypeEnum Values ----
Const adLockReadOnly = 1
Const adLockPessimistic = 2
Const adLockOptimistic = 3
Const adLockBatchOptimistic = 4

'---- CursorLocationEnum Values ----
Const adUseServer = 2
Const adUseClient = 3

	Function ExecSql(ByVal sql, ByVal conn)
		'Response.Write sSql : Response.Flush
		Set ExecSql= Server.CreateObject("ADODB.Recordset")
		ExecSql.CursorLocation = adUseClient
		On Error Resume Next
		ExecSql.Open sql, conn
		If Err.number <> 0 then
			Response.Write "ERR: " & Err.Description & " (" & Err.number & ")"
			Exit Function
		End if
		On Error Goto 0
		Set ExecSql.ActiveConnection = Nothing
	End Function
282 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
153 ms — hämta tråd, inlägg och bilagor (db)
127 ms — ändringar (db)