25. oktober 2002 - 17:31Der er
14 kommentarer og 2 løsninger
Underlig langsom udtræk fra DB
Jeg har en underlig oplevelse lige i øjeblikket! jeg er ved at lave en site med ASP/MYSQL og det virker fint, men det går utrolig langsomt når jeg skal udskrive noget fra DB'en, og jeg har tjekket at der ikke er fordi jeg looper noget!
Men det mærklige er også, at et gammelt site jeg har lavet i Access, som virkede fint da jeg lavede det, - det er også blevet utroligt langsomt, og det var det ikke før???
<% Dim StartTime, EndTime, n StartTime = GetTime() %> <% Dim ConString, Conn
'Åbner connection Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open ConString sql = "SELECT * FROM Kategori" Set objRec = Server.CreateObject("ADODB.Recordset") objRec.open sql, Conn %> <table width="520" border="0" cellspacing="0" cellpadding="0"> <% While NOT objRec.EOF Dim Conn2 Set Conn2 = Server.CreateObject("ADODB.Connection") Conn2.Open ConString sql2 = "SELECT * FROM U_Katagori WHERE u_kategoriId = " & objRec("kategoriId") Set objRec2 = Server.CreateObject("ADODB.Recordset") objRec2.open sql2, Conn2
If int_count = 0 Then Response.Write "<tr>" End If %> <td> <table width="260" border="0" cellspacing="0" cellpadding="0"> <tr> <td rowspan="2" width="5" valign="top"></td> <td rowspan="2" width="59" valign="top"> <%=("<table width=""55"" height=""55"" border=""0"" cellspacing=""0"" cellpadding=""0""><tr><td background='billeder/upload/forside/"& objRec("kategoriPic") & "' width=""51"" height=""51""><table width=""55"" border=""0"" cellspacing=""0"" cellpadding=""0""><tr><td rowspan=""4"" width=""2"" class=""hvid""></td><td colspan=""2"" height=""2"" class=""hvid""></td><td rowspan=""2"" width=""2"" class=""hvid""></td></tr><tr><td height=""36"" width=""36""></td><td width=""17""></td></tr><tr> <td height=""17""></td><td colspan=""2"" rowspan=""2"" background='billeder/site/forside_transperant.gif' height=""19"" width=""19""></td></tr><tr><td height=""2"" class=""hvid""></td></tr></table></td></tr></table>")%> </td> <td rowspan="2" width="9" valign="top"></td> <td valign="top" class="overskrift_forside"><%=("<a onfocus=""this.blur()"" href=""kategori_all.asp?id=" & objRec("kategoriId") & """>" & objRec("kategoriNavn") & "</a>")%> <span class="hovedtekst_graa">[12]</span></td> </tr> <tr> <td width="191" valign="top" class="hovedtekst"> <% Lobs = 8 ' her kan du skrive det antal gange den skal loope
For X = 1 To Int(Lobs) If NOT objRec2.EOF Then Response.Write "<a onfocus=""this.blur()"" href=""se_denne_side.asp?kategori=" & objRec2("Id") & """>" & objRec2("u_kategoriNavn") & "</a>"
objRec2.movenext
'Tilføj denne linje, så der ikke tilføjes "..." eller "," hvis dette var den sidste post If objRec2.EOF Then Exit For
If X < Int(Lobs) Then Response.Write ", " Else Response.Write "..." End If End If Next objRec2.close Conn2.Close Set Conn2 = Nothing %> </td> </tr> <tr> <td height="15"></td> </tr> </table> </td> <% If int_count = 1 Then Response.Write "</tr>" int_count = 0 Else int_count = 1 End If
Det virker som om du kun skal bruge 8 rækker fra dit 2. recordset, du udtrækker bare alle og viser de 8 første...
Prøv i stedet: sql2 = "SELECT * FROM U_Katagori WHERE u_kategoriId = " & objRec("kategoriId") & " LIMIT 8"
eller hvis du har et spec. felt du vil sortére efter: sql2 = "SELECT * FROM U_Katagori WHERE u_kategoriId = " & objRec("kategoriId") & " ORDER BY sortFelt LIMIT 8"
Samtidig tilslutter jeg min morw's kommentar om angivelse af index og feltnavne.
Jeg har prøvet at lave en JOIN funktion, men når jeg lavede den, så fik jeg kun udskrevet nogle af mine underoverskrifter - jeg kunne ikke få den til at udskrive alt det der passede til overskriften!!!
Grunden til at jeg bruger * er at jeg skal bruge alt det der står i tabellen!
Er det en af jer der ved hvordan jeg laver Join løsning, sådan at jeg udskriver aller kategorier og til hver kategori, skal udskrives alle de u_katagorier der passer til??
INDEX: Når du udvælger records efter et givent kriterie (her Kategori.kategoriid og U_Katagori.u_kategoriid), så er det klart en fordel hvis der er oprettet et index på hvert af disse felter for at forbedre søgetiden. Det går lidt ud over opdateringstiden ved ændring af poster, da index så også skal opdateres, men det er en minimal difference. Jeg gættede mig til din ID-kolonnes navn i Kategori-tabellen, det bruger jeg igen nu... så hvis det er forkert, skal du rette begge steder.
JOIN: i denne situation, hvor du åbenbart kun skal bruge max 8 underkategorier pr. hovedkategori, vil jeg IKKE anbefale joins. MEN - udgangspunktet ville i modsat fald hvae været: SELECT ho.*, un.* FROM Kategori ho INNER JOIN U_Kategori un ON ho.kategoriid = un.u_kategoriid ORDER BY ho.kategoriid, un.u_kategoriid; (order by er kun medtaget for at "samle" dine data) Princippet ved denne JOIN-Løsning er at du hele tiden får ALLE data med fra BEGGE tabeller. Derfor skal din ASP-kode holde styr på hvornår hovedkategoriid'et skifter, for på det tidspunkt at lave en ny overskrift...
LIMIT 8: Jeg mener ud fra din kode at kunne læse at du maksimalt skal bruge 8 records fra underkategori-tabellen ved hver gennemgang. Det er derfor uhensigtsmæssigt at bruge tid på at hente ALLE records fra tabellen. Hvis der pludselig er 100.000 underkategorier skal de læses ind, hvorefter du lader være med at bruge de 99.992... Overdrivelse fremmer forståelsen ;0)
Det er rigtigt at jeg kun skal bruge 8 udtræk fra underkategorien, men er det så ikke netop LIMIT 8 jeg skal bruge?
Men noget de undre mig er også som jeg skrev i starten: Det mærklige er også, at et gammelt site jeg har lavet i Access, som virkede fint da jeg lavede det(altså var hurtigt), - det er også blevet utroligt langsomt, og det var det ikke før???
Hvad der nermere er sket i din gamle Acess-DB, kan jeg ikke gennemskue med mindre der også hér er tale om, at du henter MANGE flere poster end du skal bruge...
Det virker som om at alle steder hvor jeg bruge en db på min computer, er blevet langsom!!
Jeg tænkte på at uploade min website, for at se om hastigheden er hurtig på nettet! Men jeg får nogle problemer når jeg ska lave connection til min db fra fx. www.friserverplads.dk - kender du noget til hvordan jeg gør dette?
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.