Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   MySQL: Performanceproblem mit concat (https://www.delphipraxis.net/156293-mysql-performanceproblem-mit-concat.html)

luke2 26. Nov 2010 16:46

Datenbank: MySQL • Version: 5 • Zugriff über: Zeos

MySQL: Performanceproblem mit concat
 
Hi,

Ich habe eine Tabelle, bei der ich ich sehr häufig Text anfügen muss:
Code:
update user set log = concat(log, '...') where id = 1
Leider wird diese Abfrage mit jedem Ausführen langsamer, weil MySQL anscheinend jedesmal log komplett ausließt, anstatt den Text einfach hinten anzufügen.

Die Tabelle an sich enthält dabei nur einige Hundert Einträge und id ist der primary key.
Es ist also nur das concat, das so extrem langsam wird nach einiger Zeit.

Kann man da etwas machen?

mkinzler 26. Nov 2010 16:55

AW: MySQL: Performanceproblem mit concat
 
Natürlich, es wiurd ja der Wert ausgelesen, etwas angefügt und zurückgeschrieben

luke2 26. Nov 2010 17:06

AW: MySQL: Performanceproblem mit concat
 
Und das geht nicht irgendwie anders, ohne dass der Wert ausgelesen werden muss?
Ich mein, wozu das ganze, der Wert soll doch nur hinten dran :x

shmia 26. Nov 2010 17:06

AW: MySQL: Performanceproblem mit concat
 
Ausserdem wird so die Datenbank fragmentiert.
Es wird jedesmal mehr Platz für das Feld "log" benötigt und am alten Platz entsteht ein Loch.

Überleg' dir mal, ob es nicht sinnvoll wäre zusätzlich zur Tabelle "user" eine weitere Tabelle "userlog" anzulegen:
Code:
Id |IdUser | MessageText  | Logdatetime
==========================================
1  |     1 | Login ok     | 26.11.2010 08:31
2  |     1 | Logout ok    | 26.11.2010 09:12
3  |     2 | login failed | 26.11.2010 12:35

DeddyH 26. Nov 2010 17:07

AW: MySQL: Performanceproblem mit concat
 
In diesem Zusammenhang fällt mir ein alter Witz wieder ein:
Ein Straßenbauarbeiter soll die Fahrbahnmarkierung einer Straße auffrischen. Am ersten Tag schafft er 5 km, am zweiten Tag 3 km, am dritten Tag nur noch 1 km. Als der Chef ihn darauf anspricht, sagt er: "Was erwarten Sie denn? Der Weg zum Farbtopf wird doch immer länger."

luke2 26. Nov 2010 17:28

AW: MySQL: Performanceproblem mit concat
 
Wenn ich den Text vorne einfügen wollte, würde es es verstehen, aber einen Text hinten einfügen sollte doch eigentlich eine Operation mit konstanter Laufzeit sein!?
Einer Datei kann man schließlich auch etwas hinten anfügen, ohne dass der Inhalt vorher komplett ausgelesen werden muss.

@shmia
Wenn es nicht anders geht, werde ich es wohl so machen müssen, ich hoffe aber trotzdem noch, dass es irgendeine Möglichkeit gibt das so zu machen.

Bummi 26. Nov 2010 17:35

AW: MySQL: Performanceproblem mit concat
 
der weg von shima ist der einzig richtige...

Sir Rufo 27. Nov 2010 00:45

AW: MySQL: Performanceproblem mit concat
 
Zitat:

Zitat von luke2 (Beitrag 1064332)
Wenn ich den Text vorne einfügen wollte, würde es es verstehen, aber einen Text hinten einfügen sollte doch eigentlich eine Operation mit konstanter Laufzeit sein!?
Einer Datei kann man schließlich auch etwas hinten anfügen, ohne dass der Inhalt vorher komplett ausgelesen muss.

Wenn du den Vergleich mit einer Textdatei machst, dann aber auch richtig.
Denn was du hier machen willst, ist verglichen mit einer Textdatei die Erweiterung von einer beliebigen Zeile in der Textdatei.

Ja und was passiert da? Je größer die Textdatei wird, umso länger dauert das anhängen von Text, weil ja jetzt auch hier die gesamte Datei gelesen werden muss und dann wieder geschrieben. Auseinanderschieben geht halt nicht.

Fügst du aber in einer SQL Tabelle immer wieder einen neuen Satz ein (so wie hier beschrieben), dann ist das auch vergleichbar mit deinem Beispiel der Textdatei.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:31 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