Avatar billede agerled Nybegynder
09. april 2004 - 11:26 Der er 9 kommentarer og
1 løsning

Kan denne forespørgsel forbedres!

Er der nogen der ved om nedenstående kode/forespørgsel kan forbedres/optimeres så den bliver hurtigere eller mere effektiv?

<% set orrs = openoracle("select ordrenummer,ordremodtager,ordrefase,leveringsDato,ordretype from ordrekart where (ordretype = '2' or ordretype = '1') and ordremodtager = '" & UCASE(request.form("user")) & "' and ordrefase = '4' and leveringsdato <= '"& tid &"' and leveringsdato >= '"& tid2 &"' and dataset = 'DAT' order by leveringsdato ") %>

       
    <% while not orrs.eof %>
    <% set ordrepost = openoracle("select ordrenummer,varenummer from ordrepost where ordrenummer = '" & orrs("ordrenummer") & "' and dataset = 'DAT'") %>
   
    <tr><td><b><% =orrs("leveringsDato") & " - " & orrs("ordremodtager") & " - " & orrs("ordrefase") & " - " & orrs("ordrenummer") %></b></td></tr>   
    <% while not ordrepost.eof %>
   
        <% set lagerkart = openoracle("select varenummer,varenavn from lagerkart where varenummer = '" & ordrepost("varenummer") & "' and dataset = 'DAT'") %>
    <% while not lagerkart.eof %>
            <tr><td>&nbsp;&nbsp;&nbsp;<font color="#FF0000"><% = " - " & lagerkart("varenavn") %></font></td></tr>   
        <% lagerkart.movenext %>
        <% wend %>
        <% set lagerkart = nothing %>
   
    <% ordrepost.movenext %>
    <% wend %>
    <% set ordrepost = nothing %>   
        <% orrs.movenext %>
        <% wend %>
       
        <% set orrs = nothing %>
Avatar billede -master-d- Nybegynder
09. april 2004 - 11:59 #1
Ikke lige umiddelbart, er den da meget langsom?
Avatar billede agerled Nybegynder
09. april 2004 - 12:02 #2
nej egentlig ikke. det er nogle store databaser den henter fra. Tænkte bare på om der var nogle eksperter herinde der kunne se at den kunne gøres endnu bedre...
Avatar billede nmh Nybegynder
09. april 2004 - 13:25 #3
Måske vil du få en marginal forbedring, hvis du undlader de fleste
<%..%>
Der behøver ikke at være <%...%> omkring hver linie.
Brug response.write funktionen:
response.write("<tr><td>&nbsp;&nbsp;&nbsp;<font color="#FF0000"><% = " - " & lagerkart("varenavn") %></font></td></tr>")

i stedet for at skifte mellem VBscript og html-kode.
Avatar billede nmh Nybegynder
09. april 2004 - 13:29 #4
ups:
response.write("<tr><td>&nbsp;&nbsp;&nbsp;<font color="#FF0000"><% = " - " & lagerkart("varenavn") %></font></td></tr>")

skal være
response.write("<tr><td>&nbsp;&nbsp;&nbsp;<font color=""#FF0000""> = "" - """ & lagerkart("varenavn") & "</font></td></tr>")
Avatar billede agerled Nybegynder
09. april 2004 - 13:31 #5
ok. hvad er det så man bruger outer join og inner join til?  Var det noget man kunne bruge i denne sammenhæng eller er den så optimal som den kan blive?
Avatar billede -master-d- Nybegynder
09. april 2004 - 13:38 #6
Indtil videre kan du optimere den således, ja du kan nok godt bruge JOIN i det første loop.

<%
set orrs = openoracle("select ordrenummer,ordremodtager,ordrefase,leveringsDato,ordretype from ordrekart where (ordretype = '2' or ordretype = '1') and ordremodtager = '" & UCASE(request.form("user")) & "' and ordrefase = '4' and leveringsdato <= '"& tid &"' and leveringsdato >= '"& tid2 &"' and dataset = 'DAT' order by leveringsdato ")
while not orrs.eof

set ordrepost = openoracle("select ordrenummer,varenummer from ordrepost where ordrenummer = '" & orrs("ordrenummer") & "' and dataset = 'DAT'")
   
Response.Write("<tr><td><b>"& orrs("leveringsDato") & " - " & orrs("ordremodtager") & " - " & orrs("ordrefase") & " - " & orrs("ordrenummer") &"</b></td></tr>"

    while not ordrepost.eof
   
    set lagerkart = openoracle("select varenummer,varenavn from lagerkart where varenummer = '" & ordrepost("varenummer") & "' and dataset = 'DAT'")
        while not lagerkart.eof
            Response.Write ("<tr><td>&nbsp;&nbsp;&nbsp;<font color="#FF0000">" - " & lagerkart("varenavn") &"</font></td></tr>")
      lagerkart.movenext
      wend
    set lagerkart = nothing
   
    ordrepost.movenext
    wend
set ordrepost = nothing
orrs.movenext
wend

set orrs = nothing
%>
Avatar billede agerled Nybegynder
09. april 2004 - 13:45 #7
ville JOIN være en forbedring eller spiller det ikke den store forbedring. Hvornår det er det egentlig optimalt at bruge JOINS??
Avatar billede -master-d- Nybegynder
09. april 2004 - 13:59 #8
Det er svært at sige, som sådan udfører et JOIN det samme arbejde som dit loop. I dit tilfælde kan det være en fordel når din database er så stor, så det handler om at begrænse kaldene til databasen. Dog skal man også lige tænke på hvor mange rækker der skal med i et JOIN, for det kan også nemt blive en ulempe.
Avatar billede agerled Nybegynder
09. april 2004 - 14:00 #9
tak for det master D --> du lægger bare et svar..
Avatar billede -master-d- Nybegynder
09. april 2004 - 14:03 #10
Et svar :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester