webForumDet fria alternativet

Optimering

8 svar · 255 visningar · startad av kristoffer

kristofferMedlem sedan juni 20001 257 inlägg
#1

Jag har en sida som ökar värdet i en kolumn och därefter skickar vidare besökaren till en annan URL (som hämtas i databasen).

Finns det något som kan förbättras i följande kod:

<%@ ENABLESESSIONSTATE = False %>

<%
Option Explicit
Response.Buffer = True 

Dim objConn, objRS, strURL, strConn, strSQL

strConn = ...

strSQL = "SET NOCOUNT ON; UPDATE col1 SET fld1 = fld1 + 1 WHERE id = " & Request.QueryString("ID") & " " &_
"; SET NOCOUNT OFF; SELECT fld2 FROM col1 WHERE id = " & Request.QueryString("ID") & " "

Set objConn = Server.CreateObject("ADOdb.Connection")
With objConn
	.Open strConn
	Set objRS = .Execute(strSQL)
End With

strURL = objRS(0)

objRS.Close
Set objRS = Nothing
objConn.Close
Set objConn = Nothing

Response.Redirect strURL
%>

Vilken/vilka cursor(s) skall jag använda för Execute?

------------------
http://www.tavlingar.se

LukaspojkenMedlem sedan maj 20011 312 inlägg
#2

Jag såg en jätteliten optimering...:)

Du använder Request.QueryString("ID") två gånger kör in den i en variabel och använd variabeln i stället.

Jag förstår dock inte denna raden riktigt:

With objConn
.Open strConn
Set objRS = .Execute(strSQL)
End With

strURL = objRS(0)

------------------
Alltid lär man sig något nytt varje dag...

PaceMedlem sedan juni 20019 024 inlägg
#3
With objConn
.Open strConn
Set objRS = .Execute(strSQL)
End With

Denna koden bara förenklar, så att man slipper skriva objConn flera gånger. Men här kan man göra om det till:

objConn.Open strConn
Set objRS = objConn.Execute(strSQL)

Ännu en extrem optimering!

------------------
Peter D

LarsGMedlem sedan dec. 200012 464 inlägg
#4

Som sagt,kodmässigt är det väl inte så mycket.
Det man kan fundera på är att göra sql-uttrycket till en stored procedure.
Man kan också lagra värdet på Url-en i formuläret så att man slipper hämta det.

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

LarsGMedlem sedan dec. 200012 464 inlägg
#5

Vad menar du med cursor vid execute? Om man gör

set rs = conn.execute

så blir recordsetet read-only och forward-only och det är ju det bästa om man bara vill läsa ett värde.

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

kristofferMedlem sedan juni 20001 257 inlägg
#6

Ok. Men kan man tjäna något på att göra en lagrad procedur om man skall hämta data från endast en tabell?

------------------
http://www.tavlingar.se

erkaMedlem sedan dec. 19996 522 inlägg
#7

ja det kan du, om du kör mssql i alla fall :)

------------------
Våga lek med dig själv

kristofferMedlem sedan juni 20001 257 inlägg
#8

Och om man kör SQL Server? Varför tjänar man på det?

------------------
http://www.tavlingar.se

VideMedlem sedan dec. 19998 577 inlägg
#9

Dialekten T-SQL som MSSQL använder innehåller en rikare syntax vilket medför att du kan skapa mer komplexa SQL-satser. Sedan är MSSQL också en mer kraftfull databas skapad för att tåla mycket trafik och samtidiga anrop.

------------------
Vide rox = new Vide();
rox.learn("C#");

webeye.nu

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