geschwindigkeit

koma666

Mitglied
also ich hab hier eine tabelle, mit so ca 20000 einträgen (20 spalten)
wenn ich mir die mit ASP anzeigen lassen will

set myrs = dbconnection.execute("SELECT * FROM tabelle")

do while not myrs.eof
response.write "<tr>"
response.write "<td>" & myrs("s1")&"</td><td>" & ...
response.write "<tr>"
myrs.movenext
loop

dann dauert das weit uber 20 minuten , kann man da was machen ?
es müssen aber alle datensätze angezeigt werden, also
"Zeig doch nur immer 100 pro seite an" bringt in dem fall nix
gibbts da was um das zu beschleunigen ?
 
welches dbms benutzt du denn?
wenn das bei 20000 datensätzen schon mehr als 20 minuten dauert, klingt das für mich irgendwie nach access.

dauert das über loopback (http://localhost) auch so lange, oder geht das da schneller? dann würd ich mal auf die verbindung von dir oder dem server tippen.
 
mssql server,
hab grad gesehen, das dass ding so lange braucht, da für jeden datensatz dann

set anzahl = dbconnection.execute("select count(*) anzahl from tabelle where firma = '" & myrs("firma") & "'")

ausgeführt wird, um festzustellen, ob diese Firma bereits in der Datenbank besteht.

muss aber auch sein, kann ich ned raustun, aber vielleicht gibts nen besseren Weg um das zu vergleichen
 
du führst für jeden der 20000 datensätze eine neue abfrage aus?! ist doch klar, dass das dann ewig dauert.

mach das doch mit offline-recordsets. so nach dem schema:

Code:
Dim zähler As Long

Do While Not rs1.EOF
    zähler = 0
    Do While Not rs2.EOF
        If rs1.Fields("firma") = rs2.Fields("firma") Then
            zähler = zähler + 1
        End If
        rs2.MoveNext
    Loop
    rs1.MoveNext
    Response.Write CStr(rs1.Fields("firma")) & ": " & CStr(zähler)
Loop

ist zwar auch nicht besonders schnell, aber wahrscheinlich schneller als deine version.
 
hmm also ich muss wenns den schon gibt die Hintergrundfarbe der <td> ändern in dem ich den namen anzeige,
der spass an der sache ist, das dass programm dynmisch sein soll, also mit allen datenbanken gehen soll, also les ich die systabellen aus, und mach dann quasi

'spaltenkoepfe("Name","Firma","Adresse",...)

for i = 0 to ubound(spaltenkoepfe)
if spaltenkoepfe(i) = "Firma" then
if rscheckkunde("Firma") = eval(" rsall(""spalte" & i & """)") then
tdcolor="blue"
else
tdcolor="transparent"
end if
end if
next

die anderen datensätze hab ich in einer temp tabelle,
die spalte1, spalte2, spalte3, usw hat
is bischen kompliziert, aber mit dem offline recordset vergleich wirds au ned schneller, weist du vielleicht noch was?
 
eine idee hab ich noch, weiss allerdings nicht, ob das genau das ist, was du suchst.
du könntest das ganze mit einem join machen, dann kriegst du nur die datensätze, die in beiden tabellen vorkommen:

Code:
SELECT tabelle1.text, tabelle2.text, COUNT(tabelle1.text) AS anzahl FROM tabelle1 INNER JOIN tabelle2 ON tabelle1.text = tabelle2.text GROUP BY tabelle1.text, tabelle2.text;

und nebenbei als tip: die feldnamen würd ich nicht aus einer systemtabelle auslesen. systemtabellen würd ich sowieso nur benutzen, wenn es absolut nicht anders geht.
die feldnamen einer tabelle kannst auch gleich über das recordset auslesen:
Code:
For i = 0 To rs.Fields.Count - 1
    feldnamen(i) = rs.Fields.Item(i).Name
Next i
 
hmm mal testen , also mit den zwei ofline recordsets vergleichen, das dauert noch länger, da in der kunden datenbank so 140000 datensätze sind und ich so 20000 vergleichen will, also muss ich ja für jeden kunde alle 20000 durchgehen, da is für jeden kunden eine sql anweisung ausführen schneller, aber das mit dem join test ich mal durch, danke übrigens für die hilfe :)
 
Zurück