Avatar billede reino Nybegynder
29. juni 2005 - 11:19 Der er 1 løsning

Langsom sqlforespørgsel

Hejsa

Har følgende script, virker også helt fint efter hensigten, det som scriptet gør er at hente en masse data fra en sql server. Problemet er blot at scriptet tager næsten 1 minut for at blive ekskeveret. Har lidt på fornemmelsen af det er nogle af de loops der er. Er der nogen der kan evt. komme med et forslag til optimering af scriptet, har set mig lidt død på det.

<%
session.lcid=1030
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open = "DRIVER={SQL SERVER}; SERVER=webserver; database=; UID=; password="
fbold ="0,0,1,0,1000,0,1299,1,1300,0,1499,1,1899,1,1900,0,2000,0,2099,1,2100,0,2199,1,2200,0,2399,1,2400,0,2599,1,2900,0,2999,1,6000,0,6999,1,7300,0,7499,1,7500,0,7799,1,7800,1,7830,1,7899,1,7901,0,8000,0,8001,0,8199,1,8200,0,8205,0,8229,1,8299,1,8300,0,8301,0,8499,1,8500,0,8599,1,8600,0,8697,1,8800,0,8950,1,8990,1,8999,1,9000,0,9001,0,9099,1,9200,0,9201,0,9202,0,9299,1,9399,1,9400,0,9799,1,9800,0,9830,0,9850,1,9899,1,9925,1,9960,1,9999,0"
bold = split(fbold,",")
overs ="0,1,1000,1300,1900,2000,2100,2200,2400,2900,6000,7300,7500,8000,8200,8205,8300,8500,8600,8800,9000,9001,9200,9201,9202,9400,9800,1"
over = split(overs,",")
nullst = "1000,1300,1900,2100,2200,2400,2900,6000,7300,7500,8000,8200,8300,8500,8600,8800,9000,9200,9400,9800,0"
nulls = split(nullst,",")
sumto = "1299,1499,2099,2199,2399,2599,2999,6999,7499,7799,8199,8229,8499,8599,8697,8950,9099,9299,9799,9830,0"
sums =  split(sumto,",")

dim vartabel(9999,3)
i = 0
P = 0
S = 0
n = 0

fradato = "'01.04.2005'"
tildato = "'31.05.2005'"
afd = 01
primofra = "'01.01.2005'"
primotil = "'31.03.2005'"


%>
<table width="800">
<%
SQL1 = "select konto, navn from budgetkonto order by konto"

Set RS = Conn.Execute(SQL1)

Do Until RS.EOF

  SQL2 = "select sum(belob) as bev from journaltotal where valdato>=" & fradato & " and valdato<=" & tildato & " and sel=0 and afd=" & afd & " and konto=" & rs("konto")
   
Set RS2 = Conn.Execute(SQL2)

  SQL3 = "select sum(belob) as primo from journaltotal where valdato>=" & primofra & " and valdato<=" & primotil & " and sel=0 and afd=" & afd & " and konto=" & rs("konto")

Set RS3 = Conn.Execute(SQL3)

  varkonto = Cint(rs("konto"))

  varbold = Cint(bold(i))
  varover = cint(over(p))
  varblank = cint(bold(i+1))
  varnull = cint(nulls(n))
  varsum  = cint(sums(s))

%>
<tr>
<%


    do until rs2.eof
     
      primo = 0   
      bev= 0

      if isnull(rs2("bev")) then
        bev = 0
      else
        bev = rs2("bev")
      end if

     
      'find primo
      '
      do until rs3.eof
        if isnull(rs3("primo")) then
          primo = 0
        else
          primo = rs3("primo")
        end if
       
        rs3.movenext
      loop

      ultimo = bev + primo

      sumprimo = sumprimo + primo
      sumbev  = sumbev + bev
      sumultimo = sumultimo + ultimo


      ' vartabel used for totals
      if varkonto = varsum then
        vartabel(varkonto,1) = sumprimo
        vartabel(varkonto,2) = sumbev
        vartabel(varkonto,3) = sumultimo 
        primo2  = formatnumber(sumprimo,2)
        ultimo2 = formatnumber(sumultimo,2)
        bev2    = formatnumber(sumbev,2) 
        s= s+1 
      else
        vartabel(varkonto,1) = primo
        vartabel(varkonto,2) = bev
        vartabel(varkonto,3) = ultimo
        bev2    = formatnumber(bev,2)
        primo2  = formatnumber(primo,2) 
        ultimo2 = formatnumber(ultimo,2)
      end if

      ' nulstil sumtotal
      if varnull  = varkonto then
        sumprimo  = 0
        sumbev    = 0
        sumultimo = 0 
        n = n+1
      end if

      if varbold = varkonto then
        i = i+2
        response.write "<td><b>" & RS("konto") & ("</td><td><b>") & RS("navn") & ("</b></td>")
        if varbold = varover then
          p = p+1
        else
          ' indtægter ialt
          if varkonto = 1899 then
            primo = vartabel(1299,1) + vartabel(1499,1)
            bev  = vartabel(1299,2) + vartabel(1499,2)
            ultimo= vartabel(1299,3) + vartabel(1499,3)
            primo2 = formatnumber(primo,2)
            bev2  = formatnumber(bev,2)
            ultimo2= formatnumber(ultimo,2)
            vartabel(varkonto,1) = primo
            vartabel(varkonto,2) = bev
            vartabel(varkonto,3) = ultimo
          end if
          if varkonto = 7800 then
            primo  = vartabel(1899,1) + vartabel(2099,1) + vartabel(2199,1) + vartabel(2399,1) + vartabel(2599,1) + vartabel(2999,1) + vartabel(6999,1) + vartabel(7499,1) + vartabel(7799,1)
            bev    = vartabel(1899,2) + vartabel(2099,2) + vartabel(2199,2) + vartabel(2399,2) + vartabel(2599,2) + vartabel(2999,2) + vartabel(6999,2) + vartabel(7499,2) + vartabel(7799,2)
            ultimo = vartabel(1899,3) + vartabel(2099,3) + vartabel(2199,3) + vartabel(2399,3) + vartabel(2599,3) + vartabel(2999,3) + vartabel(6999,3) + vartabel(7499,3) + vartabel(7799,3)
            primo2 = formatnumber(primo,2)
            bev2  = formatnumber(bev,2)
            ultimo2= formatnumber(ultimo,2)
            vartabel(varkonto,1) = primo
            vartabel(varkonto,2) = bev
            vartabel(varkonto,3) = ultimo
          end if
          if varkonto = 7830 then
            primo  = vartabel(7800,1)
            bev    = vartabel(7800,2)
            ultimo = vartabel(7800,3)
            primo2 = formatnumber(primo,2)
            bev2  = formatnumber(bev,2)
            ultimo2= formatnumber(ultimo,2)
            vartabel(varkonto,1) = primo
            vartabel(varkonto,2) = bev
            vartabel(varkonto,3) = ultimo
          end if
          if varkonto = 7899 then
            primo  = vartabel(7800,1)
            bev    = vartabel(7800,2)
            ultimo = vartabel(7800,3)
            primo2 = formatnumber(primo,2)
            bev2  = formatnumber(bev,2)
            ultimo2= formatnumber(ultimo,2)
            vartabel(varkonto,1) = primo
            vartabel(varkonto,2) = bev
            vartabel(varkonto,3) = ultimo
          end if
          if varkonto = 8299 then
            primo  = vartabel(8199,1) + vartabel(8229,1)
            bev    = vartabel(8199,2) + vartabel(8229,2)
            ultimo = vartabel(8199,3) + vartabel(8229,3)
            primo2 = formatnumber(primo,2)
            bev2  = formatnumber(bev,2)
            ultimo2= formatnumber(ultimo,2)
            vartabel(varkonto,1) = primo
            vartabel(varkonto,2) = bev
            vartabel(varkonto,3) = ultimo
          end if
          if varkonto = 8990 then
            primo  = vartabel(8499,1) + vartabel(8599,1) + vartabel(8697,1) + vartabel(8950,1)
            bev    = vartabel(8499,2) + vartabel(8599,2) + vartabel(8697,2) + vartabel(8950,2)
            ultimo = vartabel(8499,3) + vartabel(8599,3) + vartabel(8697,3) + vartabel(8950,3)
            primo2 = formatnumber(primo,2)
            bev2  = formatnumber(bev,2)
            ultimo2= formatnumber(ultimo,2)
            vartabel(varkonto,1) = primo
            vartabel(varkonto,2) = bev
            vartabel(varkonto,3) = ultimo
          end if
          if varkonto = 8999 then
            primo  = vartabel(8299,1) + vartabel(8990,1)
            bev    = vartabel(8299,2) + vartabel(8990,2)
            ultimo = vartabel(8299,3) + vartabel(8990,3)
            primo2 = formatnumber(primo,2)
            bev2  = formatnumber(bev,2)
            ultimo2= formatnumber(ultimo,2)
            vartabel(varkonto,1) = primo
            vartabel(varkonto,2) = bev
            vartabel(varkonto,3) = ultimo
          end if
          if varkonto = 9399 then
            primo  = vartabel(9299,1)
            bev    = vartabel(9299,2)
            ultimo = vartabel(9299,3)
            primo2 = formatnumber(primo,2)
            bev2  = formatnumber(bev,2)
            ultimo2= formatnumber(ultimo,2)
            vartabel(varkonto,1) = primo
            vartabel(varkonto,2) = bev
            vartabel(varkonto,3) = ultimo
          end if
          if varkonto = 9850 then
            primo  = vartabel(9399,1) + vartabel(9799,1)
            bev    = vartabel(9399,2) + vartabel(9799,2)
            ultimo = vartabel(9399,3) + vartabel(9799,3)
            primo2 = formatnumber(primo,2)
            bev2  = formatnumber(bev,2)
            ultimo2= formatnumber(ultimo,2)
            vartabel(varkonto,1) = primo
            vartabel(varkonto,2) = bev
            vartabel(varkonto,3) = ultimo
          end if
          if varkonto = 9899 then
            primo  = vartabel(9099,1) + vartabel(9850,1)
            bev    = vartabel(9099,2) + vartabel(9850,2)
            ultimo = vartabel(9099,3) + vartabel(9850,3)
            primo2 = formatnumber(primo,2)
            bev2  = formatnumber(bev,2)
            ultimo2= formatnumber(ultimo,2)
            vartabel(varkonto,1) = primo
            vartabel(varkonto,2) = bev
            vartabel(varkonto,3) = ultimo
          end if
          if varkonto = 9925 then
            primo  = vartabel(7899,1)
            bev    = vartabel(7899,2)
            ultimo = vartabel(7899,3)
            primo2 = formatnumber(primo,2)
            bev2  = formatnumber(bev,2)
            ultimo2= formatnumber(ultimo,2)
            vartabel(varkonto,1) = primo
            vartabel(varkonto,2) = bev
            vartabel(varkonto,3) = ultimo
          end if
          if varkonto = 9960 then
            primo  = vartabel(8999,1) - vartabel(9899,1)
            bev    = vartabel(8999,2) - vartabel(9899,2)
            ultimo = vartabel(8999,3) - vartabel(9899,3)
            primo2 = formatnumber(primo,2)
            bev2  = formatnumber(bev,2)
            ultimo2= formatnumber(ultimo,2)
            vartabel(varkonto,1) = primo
            vartabel(varkonto,2) = bev
            vartabel(varkonto,3) = ultimo
          end if 
          if varkonto = 9999 then
            primo  = vartabel(9925,1) + vartabel(9960,1)
            bev    = vartabel(9925,2) + vartabel(9960,2)
            ultimo = vartabel(9925,3) + vartabel(9960,3)
            primo2 = formatnumber(primo,2)
            bev2  = formatnumber(bev,2)
            ultimo2= formatnumber(ultimo,2)
            vartabel(varkonto,1) = primo
            vartabel(varkonto,2) = bev
            vartabel(varkonto,3) = ultimo
          end if 

          response.write "<td align=right><b>" & primo2 & ("</td><td align=right><b>") & bev2 & ("</td><td align=right><b>") & ultimo2 & "</b></td>"
         
        end if
      else
        if primo = 0 and bev = 0 then
        else
          response.write "<td>" & RS("konto") & ("</td><td>") & RS("navn") & ("</td>")
          response.write "<td align=right>" & primo2 & ("</td><td align=right>") & bev2 & ("</td><td align=right>") & ultimo2 & "</td>"
        end if
      end if
     

      RS3.Close
      RS2.movenext
    loop
    Response.write "</tr>"

    if varblank = 1 and varbold = varkonto then
        response.write "<tr><td><br></td></tr>"
    end if


   
  RS2.close 
  RS.movenext

Loop

RS.close

Conn.Close

%>
</table>
Avatar billede reino Nybegynder
25. august 2005 - 20:59 #1
lukker
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