Updaten in Datenbank dauert zu lange



  • Hallo.
    Ich hab Visual Studio .NET und ne kleine Anwendung darin gemacht, welche mir auf eine MySQL Datenbank zugreift.

    Wenn ich diese Datenbank nun Updaten möchte mit ca. 14 tausend Datensätzen (Tabelle ca doppelt so groß) braucht er für jeden Datensatz ca 1 sekunde. Wenn man das mal hochrechnet, würde das über ein paar Stunden dauern.

    Im Quellcode läuft der Update Befehl in einer Schleife, wo eigentlich nur noch die Werte in der MySQL Syntax ersetzt werden und hier und da nen zähler inkrementiert.

    Mach ich jetzt irgendwas falsch oder hat MySQL Probleme so große Daten in einer schnelleren Zeit up zu daten?

    Aktuelle MySQL Version 4.1



  • Zeig mal bitte die Schleife, vielleicht kann man da ja schon eine Bremse erkennen. 🙂



  • ...und erzähl auch gleich mal was über den Primärschlüssel und den Index (die Indices) der entsprechenden Tabelle(n).



  • for ( int i = 0; i <= string.GetCount(); i += 2 )
    {
       this->m_strSyntax = "UPDATE tabelle1 SET spalte1 = '"+string[i+1]+"', spalte2 = '"+this->m_strDateiDatum+"' WHERE spalte3 = '"+string[i]+"'";
       if ( mysql_query(conn,this->m_strSyntax) )
          Fehler();
    }
    

    string is ein Element von CStringArray
    m_strSyntax von CString
    conn die Instanz vonner DB
    und Fehler() nur reine Fehlerausgabe schreiben in LOG Datei

    Primärschlüssel liegt auf spalte0 die sich bei INSERT auto_incrementiert



  • Der Query, tut der jedesmal die Datenbank öffnen, Statement absetzen, Datenbank wieder schließen, oder wird die irgendwo vorher geöffnet?



  • nein, DB wird vorher geöffnet und bei programm ende wieder geschlossen



  • Hm der such nach irgendeiner Spalte und nicht dem Primary Key, kann schon sein, dass das nicht schneller geht.



  • ja, das is richtig; aber die spalte3 ist nicht eindeutig
    sprich: der inhalt der spalte3 kommt mehrmals vor

    habe aber auf spalte3 nen index



  • gefühlsmäßig würd ich sagen geht net viel schneller. Durch deine Where-Klausel muss der Datenbankserver durch alle Datensätze gehen, die in der Tabelle stehen. Und wenn das einige Tausend sind, ist das nunmal arbeit für den.
    Kannst du evtl. was am Datenbankssystem einstellen? Das z.B: irgendwie das such auf Spalte 3 bescheuenigt wird, irgendwie sowas?



  • ja, ich denke, dass ich da an die struktur dran muss


Anmelden zum Antworten