tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
6
ZUGRIFFE
563
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von koma666
    koma666 koma666 ist offline Mitglied Bronze
    Registriert seit
    Jun 2002
    Beiträge
    46
    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 ?
     

  2. #2
    Registriert seit
    Nov 2001
    Ort
    Gießen
    Beiträge
    4.091
    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.
     
    "You could say that I was too lazy to calculate and so I invented the computer." -- Konrad Zuse

  3. #3
    Avatar von koma666
    koma666 koma666 ist offline Mitglied Bronze
    Registriert seit
    Jun 2002
    Beiträge
    46
    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
     

  4. #4
    Registriert seit
    Nov 2001
    Ort
    Gießen
    Beiträge
    4.091
    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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    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.
     
    "You could say that I was too lazy to calculate and so I invented the computer." -- Konrad Zuse

  5. #5
    Avatar von koma666
    koma666 koma666 ist offline Mitglied Bronze
    Registriert seit
    Jun 2002
    Beiträge
    46
    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?
     

  6. #6
    Registriert seit
    Nov 2001
    Ort
    Gießen
    Beiträge
    4.091
    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 :
    1
    
    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 :
    1
    2
    3
    
    For i = 0 To rs.Fields.Count - 1
        feldnamen(i) = rs.Fields.Item(i).Name
    Next i
     
    "You could say that I was too lazy to calculate and so I invented the computer." -- Konrad Zuse

  7. #7
    Avatar von koma666
    koma666 koma666 ist offline Mitglied Bronze
    Registriert seit
    Jun 2002
    Beiträge
    46
    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
     

Ähnliche Themen

  1. Geschwindigkeit
    Von bauchinj im Forum PHP
    Antworten: 4
    Letzter Beitrag: 10.02.10, 13:45
  2. Geschwindigkeit
    Von Banditxxy im Forum Flash Plattform
    Antworten: 4
    Letzter Beitrag: 22.12.04, 01:32
  3. Dsl-geschwindigkeit-
    Von MasterLutz im Forum Internet, DSL & Flatrate
    Antworten: 6
    Letzter Beitrag: 17.11.04, 21:35
  4. Geschwindigkeit
    Von UULF im Forum 3D Studio Max
    Antworten: 3
    Letzter Beitrag: 24.09.04, 07:17
  5. XP und Geschwindigkeit
    Von Avariel im Forum Office-Anwendungen
    Antworten: 7
    Letzter Beitrag: 21.02.03, 11:45