AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken MySQL: Performanceproblem mit concat
Thema durchsuchen
Ansicht
Themen-Optionen

MySQL: Performanceproblem mit concat

Ein Thema von luke2 · begonnen am 26. Nov 2010 · letzter Beitrag vom 27. Nov 2010
Antwort Antwort
luke2

Registriert seit: 17. Jun 2009
117 Beiträge
 
#1

MySQL: Performanceproblem mit concat

  Alt 26. Nov 2010, 16:46
Datenbank: MySQL • Version: 5 • Zugriff über: Zeos
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?

Geändert von luke2 (26. Nov 2010 um 16:51 Uhr)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: MySQL: Performanceproblem mit concat

  Alt 26. Nov 2010, 16:55
Natürlich, es wiurd ja der Wert ausgelesen, etwas angefügt und zurückgeschrieben
Markus Kinzler
  Mit Zitat antworten Zitat
luke2

Registriert seit: 17. Jun 2009
117 Beiträge
 
#3

AW: MySQL: Performanceproblem mit concat

  Alt 26. Nov 2010, 17:06
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
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#4

AW: MySQL: Performanceproblem mit concat

  Alt 26. Nov 2010, 17:06
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
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: MySQL: Performanceproblem mit concat

  Alt 26. Nov 2010, 17:07
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."
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
luke2

Registriert seit: 17. Jun 2009
117 Beiträge
 
#6

AW: MySQL: Performanceproblem mit concat

  Alt 26. Nov 2010, 17:28
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.
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#7

AW: MySQL: Performanceproblem mit concat

  Alt 26. Nov 2010, 17:35
der weg von shima ist der einzig richtige...
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: MySQL: Performanceproblem mit concat

  Alt 27. Nov 2010, 00:45
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.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Antwort Antwort


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 11:17 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