ASPDatabaserExempeldatatatOptimering av databaslistningar
[ Hem ] Allmänt ASP XML SQL ADO HTML CSS VB Java Design Karta
Grunder Input/output VBScript Databaser Tips Exempel

Optimering av databaslistningar

Normalt skall vi inte loopa genom fälten som i föregående exempel. Loopar tar tid och oftast så vet vi ju vilka fält från databasen vi vill visa. Men även när vi använder konstruktionen RS("FÄLTNMAMN") eller RS(indexsiffra) så krävs en "sökning" då rätt fält skall hittas i fältkollektionen.

Genom att använda nedanstående metod så görs denna "fältsökning" bara en gång

Använder vi SELECT * FROM... kan det ju även hända att vi inte behöver alla fält som kommer i resultattabellen.

En prestanda optimerad kod blir då:
(Eftersom IIS kompilerar ASP koden först gången den körs så kan koden vara lite trög första gången sidan laddas. Nästa gång har den fått upp farten)

<%
' för att kunna mäta snabbheten så lagrar jag först nuvarande tid
startTime = now
%>

<!-- #include file="connection.asp" -->
<%
' Deklarerar variablerna som skall användas
Dim Conn
Dim RS
' Nedanstående kall användas för objekt av type Field
Dim byteField, textField, memoField

Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open strConn

' Första optimeringen - tag bara de fält vi vill ha
Set RS = Conn.Execute("SELECT aBYTE, aTEXT, aMEMO FROM EXEMPELDATA ORDER BY aTEXT")

' Andra och viktigaste optimeringen
' Säger nedan vilket fältobjekt som är vilket fält
' Observera att om det är objekt så måste Set användas
' Det blir oftast STOR skillnad i fart om man använder fältobjekt
Set byteField = RS("aBYTE")
Set textField = RS("aTEXT")
Set memoField = RS("aMEMO")
%>

<TABLE BORDER=1>
<TR>
<td>aBYTE</td><td>aTEXT</td><td>aMEMO</td>
</TR>
<% Do While Not RS.EOF %>
   <TR>
      <td valign="top">
         <%= byteField %>
      </td>
      <td valign="top">
         <%= textField %>
      </td>
      <td valign="top">
         <%= memoField %>
      </td>
   </TR>
   <%
   RS.MoveNext
Loop
RS.Close
Conn.Close
Set RS = Nothing
Set Conn = Nothing
%>

<%
' räknar ut skillnaden mellan nu (now) och den tid vi sparade innan
' vi startade programkoden
="Tid i sekunder: " & DateDiff("s", startTime, now)
%>

Förklaring till ovanstående program:


Set RS = Conn.Execute("SELECT aBYTE, aTEXT, aMEMO FROM EXEMPELDATA ORDER BY aTEXT")
Vi säger vilken tabell vi vill ha med hjälp av en vanlig SQL SELECT sats. Dessutom preciserar vi exakt vilka fält vi är intresserade av. ORDER BY aTEXT gör att det sorteras enligt fältet aTEXT

Set byteField = RS("aBYTE")
Set textField = RS("aTEXT")
Set memoField = RS("aMEMO")
Genom att skapa fältvariabler så söker vi fram rätt fält en gång för alla. Om vi i en loop använder RS("aBYTE") så måste ADO för varje var söka fram det fält ti tabellen som heter aBYTE
Nu vet den exekt vilket fält som avses och vikan då använda <%= byteField %> istället

Resultatet av ovanstående program blir:

aBYTEaTEXTaMEMO
1 Textrad 1 En längre testrad som kan vara rätt lång 1
1 Textrad 10 En längre testrad som kan vara rätt lång 10
2 Textrad 11 En längre testrad som kan vara rätt lång 11
0 Textrad 12 En längre testrad som kan vara rätt lång 12
1 Textrad 13 En längre testrad som kan vara rätt lång 13
2 Textrad 14 En längre testrad som kan vara rätt lång 14
0 Textrad 15 En längre testrad som kan vara rätt lång 15
1 Textrad 16 En längre testrad som kan vara rätt lång 16
2 Textrad 17 En längre testrad som kan vara rätt lång 17
0 Textrad 18 En längre testrad som kan vara rätt lång 18
1 Textrad 19 En längre testrad som kan vara rätt lång 19
2 Textrad 2 En längre testrad som kan vara rätt lång 2
2 Textrad 20 En längre testrad som kan vara rätt lång 20
0 Textrad 3 En längre testrad som kan vara rätt lång 3
1 Textrad 4 En längre testrad som kan vara rätt lång 4
2 Textrad 5 En längre testrad som kan vara rätt lång 5
0 Textrad 6 En längre testrad som kan vara rätt lång 6
1 Textrad 7 En längre testrad som kan vara rätt lång 7
2 Textrad 8 En längre testrad som kan vara rätt lång 8
0 Textrad 9 En längre testrad som kan vara rätt lång 9
Tid i sekunder att utföra programmet: 0
  Lista hela tabellenBläddra några åt gången
Databaser
Exempeldatatat
Snabbkurs i SQL
Enkel listning
Lista hela tabellen
Optimering av databaslistningar
Bläddra några åt gången
Visa mer data om posten
Resultatet av föregående kapitel
Insättning av nya poster
Uppdatering av poster
Radering av poster
Typkontroll
En JavaScript lösning för typkontroll
Resultat från valideringarna
Alternativ lösning för bläddring
Databasexempel
En gästbok
Förklaringar till gästboken
Om du vill se vad som finns i tabellerna...
Databasform
Databasform med Include


Top
< Lista hela tabellen Bläddra några åt gången>
© Anders Enges, Vörå 2002  | 22.01.01 19:24 Visa asp koden