2016-03-28 10 views
-2

Ich habe ein Problem auf die Leistung meines Programms mit C#.mySQL - Einfügen von Daten mit langsamer Zeit

In der ersten Schleife fügt die Tabelle 175000 Datensätze mit 54 Sekunden ein und aktualisiert sie. In der zweiten Schleife, mit 175000 Aufzeichnungen, 1 Minute 11 Sekunden. Als nächstes die dritte Schleife, mit 18195 1 min 28 Sekunden. Die Schleife läuft und die Zeit ist mehr für 125 Datensätze kann bis zu 2 Minuten gehen.

Ich frage mich, warum kleinere Aufzeichnungen länger dauern würden, um zu aktualisieren? Hat die Anzahl der Datensätze keine Auswirkung auf die Zeit, die für die Ausführung der Schleife benötigt wird?

Kann mir jemand darüber aufklären?

Fluss des Programms:

Legen Sie in TableA (Datum, Uhrzeit) wählen Sie Datum, Uhrzeit von rawdatatbl wo id> = startID & & id = < maxid; // startID ist die nächste ID der letzten Aufzeichnungen

Update TableA Satz column = Werte, Spaltenname1 = Werte, columnName2 = Werte, column .....

Ich bin mit InnoDB.

+1

Bitte zeigen Sie den Code an, nach dem Sie fragen. –

+0

führen Einfügen und Updates in allen drei Schleifen? –

+0

@ un-lucky ja, für diese Tabelle A, jede Schleife wird Datum und Uhrzeit einfügen, indem Datum und Uhrzeit aus anderen Tabellen sagen Rohdatentabelle, dann aktualisiert das Programm die Werte in der Tabelle A – njz

Antwort

2

Das angegebene Verhalten scheint mit der wachsenden Größe der Tabelle und dem ineffizienten Abfrageausführungsplan für UPDATE-Anweisungen übereinzustimmen. Die wahrscheinlichste Erklärung wäre, dass UPDATE einen vollständigen Tabellenscan ausführt, um zu aktualisierende Zeilen zu finden, weil ein entsprechender Index nicht verfügbar ist. Und da die Tabelle mehr und mehr Zeilen hinzugefügt hat, dauert es länger und länger, den vollständigen Tabellenscan durchzuführen.

Schnell Empfehlungen:

Überprüfung der Abfrageausführungsplan (erhalten durch EXPLAIN läuft)

geeigneten Indizes überprüfen ist verfügbar und werden

aus, dass

Apart verwendet werden, gibt es Abstimmung der MySQL-Instanz selbst . Aber das hängt davon ab, welche Speicher-Engine die Tabellen verwenden, MyISAM, InnoDB, et al.

+0

ich verwende InnoDB – njz

0

Bitte geben Sie SHOW CREATE TABLE für beide Tabellen und die tatsächlichen Aussagen. Hier sind ein paar Schätzungen ...

  • Die Zieltabelle hat Indizes. Da die Indizes mit den Einfügungen erstellt werden, werden alle "zufälligen" Indizes immer langsamer.
  • innodb_buffer_pool_size war so klein, dass Caching ein Problem wurde.
  • Die UPDATE scheint eine vollständige Tabelle zu aktualisieren. Nun, der Tisch ist jedes Mal größer.
  • Wie haben Sie startID aus einer Abfrage vor der nächsten (die id>=startID hat)? Vielleicht ist dieser Code langsamer, wenn Sie weiter in den Tisch kommen.
  • Sie sagen "in der zweiten Schleife", wo ist die "Schleife"? Oder haben Sie sich auf die INSERT...SELECT als eine "Schleife" bezogen?