Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi MySQL schnell UPDATEN! (https://www.delphipraxis.net/150795-mysql-schnell-updaten.html)

Ruewue 27. Apr 2010 12:41

Datenbank: MySQL • Version: 5.1 • Zugriff über: MyDac

MySQL schnell UPDATEN!
 
Hallo an die Datenbankspezies,

ich habe da ein Probelm mit unsere MySQL Datenbank. Es sollen ca. 2.200.000 Datensätze überarbeitet werden und dann mit einem UPDATE neu gesetzt werden.

Dieser UPDATE Befehl dauert immer sehr lange. Kann mir einer sagen, wie ich diesen beschleunigen kann? Als Beispiel habe ich aus den 2,2 Mio Sätzen ca 120.000 rausgeholt und will diese UPDATEN. Da sie am Ende der Tabelle sitzen dauer jedes Update sehr lange. Ich würde jetzt lieber die ausgewählten Datensätze sequenziell ab arbeiten und dann auch gleich updaten. Geht dies in MySQL? Es müssen bei jedem Satz 3 Felder neu gesetzt werden. Ich habe es schon mit einem INDEX auf die 4 Felder der WHERE Abfrage gemacht aber es dauert einfach sehr lange.

Für einen kleine Tip oder einer Hilfe schon mal jetzt meinen Dank!

Bernhard Geyer 27. Apr 2010 12:53

Re: MySQL schnell UPDATEN!
 
Die üblichen Beschleunigungsmöglichkeiten verwenden:

Prepared Statements oder gleich eine Stored Procedure.

HeikoAdams 27. Apr 2010 12:54

Re: MySQL schnell UPDATEN!
 
Zitat:

Zitat von Ruewue
Dieser UPDATE Befehl dauert immer sehr lange. Kann mir einer sagen, wie ich diesen beschleunigen kann?

Die einzigen effektiven Möglichkeiten wäre vernünftig eingesetzte Indizes, da zuviele Indizes in einer Tabelle auch bremsen können. Wobei Du Dich mit dem Gedanken anfreunden solltest, das ein Update von 2,2 Mio Datensätzen halt eine gewisse Zeit dauert.

Zitat:

Zitat von Ruewue
Ich würde jetzt lieber die ausgewählten Datensätze sequenziell ab arbeiten und dann auch gleich updaten. Geht dies in MySQL?

Da heißt das Zauberwort für Tante Google Bei Google suchenmysql cursor

Zitat:

Zitat von Bernhard Geyer
oder gleich eine Stored Procedure.

Wobei die SP bei einer nicht indizierten Tabelle wahrscheinlich auch sehr lange brauchen würde. Ergo führt um Indizes (fast) kein Weg herum.

himitsu 27. Apr 2010 13:00

Re: MySQL schnell UPDATEN!
 
Was heißt hier eigentlich "extrem lange"?

Bei 2.200.000 nötigen Änderungen und 10 Änderungen pro Millisekunde, dann ergibt das immerhin über 3,5 Minuten.

hoika 27. Apr 2010 13:15

Re: MySQL schnell UPDATEN!
 
Hallo,

zeig doch mal ein bisschen Code.

Wie genau machst du das Update ?
Werden Transaktionen benutzt ?
Welche DB-Engine benutzt ihr (InnoDB ... )?


Heiko

Ruewue 27. Apr 2010 14:26

Re: MySQL schnell UPDATEN!
 
Danke erst Mal für die Antworten!

Der Ablauf sieht wie folgt aus:

Mit SELECT alle Daten aus Tabelle 1 einlesen.

WHILE not EOF do
Daten in Tabelle 2 suchen

wenn gefunden dann Daten in Tabllle 3 suchen sonnst in Tabelle 4

Daten mit UPDATE wieder auf neuen Stand bringen

Nächsten Datensatz holen
END

Ich habe eine Indize mit den 4 Suchfeldern auf Tabelle 1.

Ein Datensatz benötigt in obigen Durchlauf ca. 30 sekunden, was einfach nicht sein kann.

JohannesK 27. Apr 2010 14:38

Re: MySQL schnell UPDATEN!
 
Welche Tabelle enthält denn welche Daten ?
Sind alle mit 2.2 Mio Datensätzen
Gibt es einen Primärschlüssel in der Tabelle fürs Update?
auf welche der 4 Tabellen geht das Update?

Wie sieht es mit einem JOIN von Tabelle 1 und 2 aus ?
Ein bisschen mehr Info wäre hilfreich.

Ruewue 27. Apr 2010 14:57

Re: MySQL schnell UPDATEN!
 
OK Danke!

In Tabelle 1 sind 2.2 Mio. Datensätze
In Tabelle 2, Tabelle 3 und Tabelle 4 núr ca. 5400 Datensätze.

Das Update geht wieder auf Tabelle 1

Es gibt keien JOIN zwischen Tabelle 1 und Tabelle 2. Da es sein kann, dass in Tabelle 2 keine Daten vorhanden sind, was zu einem Fixwert und der Suche in Tabelle 4 führt.

DeddyH 27. Apr 2010 15:06

Re: MySQL schnell UPDATEN!
 
Wenn ich das richtig verstanden habe, holst Du Dir alle Daten auf den Client, verarbeitest die Datensätze einzeln und schickst dann je DS ein Update zum Server zurück. Da denke ich, hat Bernhard Recht, eine SP sollte da um einiges performanter sein.

JohannesK 27. Apr 2010 15:16

Re: MySQL schnell UPDATEN!
 
Ohne Code und Tabellenstruktur ist es schwierig einen vernünftigen Tipp zu geben.
Wie sieht z.B. Dein SELECT aus und Dein Index?


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:52 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz