AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi MySQL schnell UPDATEN!
Thema durchsuchen
Ansicht
Themen-Optionen

MySQL schnell UPDATEN!

Ein Thema von Ruewue · begonnen am 27. Apr 2010 · letzter Beitrag vom 4. Mai 2010
Antwort Antwort
Seite 1 von 3  1 23      
Ruewue

Registriert seit: 16. Okt 2006
27 Beiträge
 
#1

MySQL schnell UPDATEN!

  Alt 27. Apr 2010, 13:41
Datenbank: MySQL • Version: 5.1 • Zugriff über: MyDac
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!
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.197 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: MySQL schnell UPDATEN!

  Alt 27. Apr 2010, 13:53
Die üblichen Beschleunigungsmöglichkeiten verwenden:

Prepared Statements oder gleich eine Stored Procedure.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von HeikoAdams
HeikoAdams

Registriert seit: 12. Jul 2004
Ort: Oberfranken
661 Beiträge
 
FreePascal / Lazarus
 
#3

Re: MySQL schnell UPDATEN!

  Alt 27. Apr 2010, 13:54
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 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 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.
Jeder kann ein Held werden und Leben retten!
Einfach beim NKR oder der DKMS als Stammzellenspender registrieren! Also: worauf wartest Du noch?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.081 Beiträge
 
Delphi 12 Athens
 
#4

Re: MySQL schnell UPDATEN!

  Alt 27. Apr 2010, 14:00
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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: MySQL schnell UPDATEN!

  Alt 27. Apr 2010, 14:15
Hallo,

zeig doch mal ein bisschen Code.

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


Heiko
Heiko
  Mit Zitat antworten Zitat
Ruewue

Registriert seit: 16. Okt 2006
27 Beiträge
 
#6

Re: MySQL schnell UPDATEN!

  Alt 27. Apr 2010, 15:26
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.
  Mit Zitat antworten Zitat
JohannesK

Registriert seit: 17. Jul 2003
Ort: Abtwil
118 Beiträge
 
Delphi 2010 Professional
 
#7

Re: MySQL schnell UPDATEN!

  Alt 27. Apr 2010, 15:38
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.
mit freundlichem Gruss

So einfach wie möglich. Aber nicht einfacher.
  Mit Zitat antworten Zitat
Ruewue

Registriert seit: 16. Okt 2006
27 Beiträge
 
#8

Re: MySQL schnell UPDATEN!

  Alt 27. Apr 2010, 15:57
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.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#9

Re: MySQL schnell UPDATEN!

  Alt 27. Apr 2010, 16:06
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
JohannesK

Registriert seit: 17. Jul 2003
Ort: Abtwil
118 Beiträge
 
Delphi 2010 Professional
 
#10

Re: MySQL schnell UPDATEN!

  Alt 27. Apr 2010, 16:16
Ohne Code und Tabellenstruktur ist es schwierig einen vernünftigen Tipp zu geben.
Wie sieht z.B. Dein SELECT aus und Dein Index?
mit freundlichem Gruss

So einfach wie möglich. Aber nicht einfacher.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:44 Uhr.
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