/ Forside / Teknologi / Udvikling / ASP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
ASP
#NavnPoint
smorch 9259
Harlekin 1866
molokyle 1040
Steffanst.. 758
gandalf 657
smilly 564
gibson 560
cumano 530
MouseKeep.. 480
10  Random 410
Performance problemer
Fra : Jimmy


Dato : 07-02-03 08:56

Hej

ASP og Access
Har et lille performance problem i et af mine programmer. kører denne SQL
gentagne gange når man går ind på en side, hvilket forårsager lang ventetid
før den kommer frem:

SqlText1 = "select max(slut) from db where slut >= " &
DateTimeToSql(tid) & " and start < " & DateTimeToSql(tid) & " and adgang_id
= " & r_uid
set rs_db = linkDB.Execute(SqlText1)

Jeg har hørt at det skulle være hurtigere at køre det som stored procedures,
hvilket i Access hedder forespørgsel. Dette har jeg prøvet ved at gøre sådan
her:

SqlText1 = "EXECUTE maxslutkalaft " & DateTimeToSql(tid) & ", " &
DateTimeToSql(tid) & ", " & r_uid
set rs_db = linkDB.Execute(SqlText1)

Det sjove er bare at siden loader faktisk hurtigere ind når jeg kører det
dynamisk fremfor via forespørgsel (stored procedures)

Jeg ved snart ikke hvad jeg skal gøre, jeg har indekseret start, slut og
adgang_id.

Hvbad gør jeg galt?
Hvad kan jeg gøre for at få det til at køre hurtigere?

--


Jimmy



 
 
Arne (07-02-2003)
Kommentar
Fra : Arne


Dato : 07-02-03 09:14


> ASP og Access
> Har et lille performance problem i et af mine programmer. kører denne SQL
> gentagne gange når man går ind på en side, hvilket forårsager lang
ventetid
> før den kommer frem:

> SqlText1 = "select max(slut) from db where slut >= " &
> DateTimeToSql(tid) & " and start < " & DateTimeToSql(tid) & " and
adgang_id
> = " & r_uid
> set rs_db = linkDB.Execute(SqlText1)

Start med at lægge dine gentagelser i variabler inden du bruger dem:

varTid = DateTimeToSql(tid) (sparer gentagne beregningskræfter/tid)

Jeg er ikke sikker på at det er optimalt med en både > og en < end
'DateTimeToSql(tid)'...??..det må kunne gøres mere praktisk og mindre
selvmodsigende..??! (ser godt at det er Slut og Start, men alligevel)

> Jeg har hørt at det skulle være hurtigere at køre det som stored
procedures,
> hvilket i Access hedder forespørgsel. Dette har jeg prøvet ved at gøre
sådan
> her:

Det er som regel hurtigere med Stored Procedures, men ikke hvis det skal
være beregningstungt....så er det nok nærmere en Funktion du skal lave, da
sådan en er beregnet til at komme med et output efter en beregning af en
slags.
Vil lige sige at der ikke helt kan sættes lig-tegn ml. Stored Proc. og
Forespørgsel......SQL-server kontra Access.

Prøv at tune din select-sætning så den ikke skal beregne på hele databasen
mere end en gang.......så tror jeg du kommer et stykke ad vejen til hurtig
kode.

Håber det kan give lidt.......ud over en masse brok...*ss*


--
mvh.
Arne Rasmussen
www.rasweb.dk



Jimmy (07-02-2003)
Kommentar
Fra : Jimmy


Dato : 07-02-03 09:57

> Start med at lægge dine gentagelser i variabler inden du bruger dem:
>
> varTid = DateTimeToSql(tid) (sparer gentagne beregningskræfter/tid)

Jeg er ret overrasket over hvor meget dette rent faktisk betød, men jeg kan
konstatere at det er blevet hurtigere. Jeg havde faktisk ikke regnet med at
det havde den største betydning. Så tak.

> Jeg er ikke sikker på at det er optimalt med en både > og en < end
> 'DateTimeToSql(tid)'...??..det må kunne gøres mere praktisk og mindre
> selvmodsigende..??! (ser godt at det er Slut og Start, men alligevel)

Ja, jeg er også selv ret ked af dette. Måske det kunne løses med 2 sql kald,
men det vil nok ikke ligefrem gavne performance, eller vil det? Hvis det nu
er indekseret rigtigt?
Ja, jeg må lige se om ikke jeg kan gøre det smartere.

> Det er som regel hurtigere med Stored Procedures, men ikke hvis det skal
> være beregningstungt....så er det nok nærmere en Funktion du skal lave, da
> sådan en er beregnet til at komme med et output efter en beregning af en
> slags.
> Vil lige sige at der ikke helt kan sættes lig-tegn ml. Stored Proc. og
> Forespørgsel......SQL-server kontra Access.

Hvad er så fordelen ved at kunne køre det som en forespørgsel i access? Som
jeg ser det giver det ingen forskel. Er det korrekt? Eller er det bare fordi
jeg kører end < og > i samme forespørgsel at jeg ikke ser forskellen?

> Prøv at tune din select-sætning så den ikke skal beregne på hele databasen
> mere end en gang.......så tror jeg du kommer et stykke ad vejen til hurtig
> kode.

Det må jeg se på.

> Håber det kan give lidt.......ud over en masse brok...*ss*

Hehe...

Tak for hjælpen :)

Jimmy



Jens Gyldenkærne Cla~ (07-02-2003)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 07-02-03 11:26

Jimmy skrev:

> Ja, jeg er også selv ret ked af dette. Måske det kunne løses
> med 2 sql kald, men det vil nok ikke ligefrem gavne
> performance, eller vil det? Hvis det nu er indekseret rigtigt?
> Ja, jeg må lige se om ikke jeg kan gøre det smartere.

Prøv med BETWEEN:

....WHERE " & varTid & " BETWEEN start AND slut...

>> Det er som regel hurtigere med Stored Procedures, men ikke
>> hvis det skal være beregningstungt....

Jo - også til beregninger. En funktion kan godt være lige så
hurtig, men stored procedures vil (så godt som) altid være at
foretrække.

>> Vil lige sige at der ikke helt kan sættes lig-tegn ml. Stored
>> Proc. og Forespørgsel......SQL-server kontra Access.

Nej, Access har slet ikke stored procedures, og du har ganske ret i
at man ikke kan sammenligne sp'er med Access-forespørgsler. En
forespørgsel i Access kan bedre sammenlignes med et View i sql-
server, selvom forespørgslen i modsætning til et view også kan
gemme sortering.

> Hvad er så fordelen ved at kunne køre det som en forespørgsel
> i access?

Der er næppe nogen performanceforskel. Men en gemt forespørgsel kan
være meget lettere at referere til - specielt hvis der er mange
joins eller komplekse kriterier (så sparer man selvfølgelig også en
smule dataoverførsel, men det betyder nok ikke det store).

Hvis man f.eks. skal vælge data fra 4 tabeller flere gange på et
site vil det være lettere at holde så meget som muligt af sqlkoden
i Access, så man på siderne fx kan nøjes med at sige:

SELECT navn, afdeling, telefon FROM fsp_kompleksforesporgsel WHERE
personID = 42

i stedet for

SELECT navn, afdeling, telefon FROM personer p INNER JOIN
afdelinger a ON p.afdelingsID = a.afdelingsID WHERE
a.afdelingsStatus = 'yz' AND p.ansat = true
--
Jens Gyldenkærne Clausen
MF (medlem af FIDUSO - www.fiduso.dk)
I ovenstående tekst benyttes nyt komma
(rettelser modtages gerne i dk.kultur.sprog)

Jimmy (08-02-2003)
Kommentar
Fra : Jimmy


Dato : 08-02-03 00:47

> Jimmy skrev:
>
> > Ja, jeg er også selv ret ked af dette. Måske det kunne løses
> > med 2 sql kald, men det vil nok ikke ligefrem gavne
> > performance, eller vil det? Hvis det nu er indekseret rigtigt?
> > Ja, jeg må lige se om ikke jeg kan gøre det smartere.
>
> Prøv med BETWEEN:
>
> ...WHERE " & varTid & " BETWEEN start AND slut...

Har lige prøvet det, men kan desværre ikke se nogen forskel i performance.

> >> Vil lige sige at der ikke helt kan sættes lig-tegn ml. Stored
> >> Proc. og Forespørgsel......SQL-server kontra Access.
>
> Nej, Access har slet ikke stored procedures, og du har ganske ret i
> at man ikke kan sammenligne sp'er med Access-forespørgsler. En
> forespørgsel i Access kan bedre sammenlignes med et View i sql-
> server, selvom forespørgslen i modsætning til et view også kan
> gemme sortering.

Jeg formoder at views dermed heller ikke vil hjælpe på performance med
mindre at jeg kan undgå en sortering i sidste ende. Jeg har jo allerrede
index på start og slut.

> > Hvad er så fordelen ved at kunne køre det som en forespørgsel
> > i access?
>
> Der er næppe nogen performanceforskel. Men en gemt forespørgsel kan
> være meget lettere at referere til - specielt hvis der er mange
> joins eller komplekse kriterier (så sparer man selvfølgelig også en
> smule dataoverførsel, men det betyder nok ikke det store).

Det kan jeg i hvert fald heller ikke mærke rent performance mæssigt.

> Hvis man f.eks. skal vælge data fra 4 tabeller flere gange på et
> site vil det være lettere at holde så meget som muligt af sqlkoden
> i Access, så man på siderne fx kan nøjes med at sige:
>
> SELECT navn, afdeling, telefon FROM fsp_kompleksforesporgsel WHERE
> personID = 42
>
> i stedet for
>
> SELECT navn, afdeling, telefon FROM personer p INNER JOIN
> afdelinger a ON p.afdelingsID = a.afdelingsID WHERE
> a.afdelingsStatus = 'yz' AND p.ansat = true

Ah ja, her er fsp_kompleksforesporgsel et view. Jeg kan godt se at det ser
noget pænere ud i koden. Vil det give noget rent performance mæssigt?

Tak for hjælpen... :)

Jimmy



Christian M. Nielsen (08-02-2003)
Kommentar
Fra : Christian M. Nielsen


Dato : 08-02-03 09:31


"Jens Gyldenkærne Clausen" <jens@gyros.invalid> wrote in message
news:Xns931B7446CBD65jcdmfdk@gyrosmod.dtext.news.tele.dk...
> Jimmy skrev:
>
> > Ja, jeg er også selv ret ked af dette. Måske det kunne løses
> > med 2 sql kald, men det vil nok ikke ligefrem gavne
> > performance, eller vil det? Hvis det nu er indekseret rigtigt?
> > Ja, jeg må lige se om ikke jeg kan gøre det smartere.
>
> Prøv med BETWEEN:
>
> ...WHERE " & varTid & " BETWEEN start AND slut...

virker BETWEEN som

>= " & Start & " AND <=" & Slut & "

eller

>" & Start & " AND <" & Slut & "

altså ingen "=", ?
--

Mvh / Regards

-=< Christian >=-

What capital has 164 letters in its name? See my web page to find out.
http://www.cmnielsen.dk ICQ: 25308942
Destiny is not a matter of chance it is a matter of choice



Jens Gyldenkærne Cla~ (08-02-2003)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 08-02-03 09:42

Jimmy skrev:

> Jeg formoder at views dermed heller ikke vil hjælpe på
> performance

Hverken stored procedures eller views findes i Access (selvom views
minder en del om en gemt forespørgsel).

På SQL-server kan man lave et indekseret view, hvilket kan hjælpe
på performance - men det kan du desværre ikke bruge til noget i
Access.


> Ah ja, her er fsp_kompleksforesporgsel et view.

Nej - det er en gemt forespørgsel (som ville have været et view i
andre databaser).
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Jens Gyldenkærne Cla~ (08-02-2003)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 08-02-03 09:45

Christian M. Nielsen skrev:

> virker BETWEEN som
>
> >= " & Start & " AND <=" & Slut & "

Ja.
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Søg
Reklame
Statistik
Spørgsmål : 177559
Tips : 31968
Nyheder : 719565
Indlæg : 6408937
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste