AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Was ist schneller einfügen oder bearbeiten
Thema durchsuchen
Ansicht
Themen-Optionen

Was ist schneller einfügen oder bearbeiten

Ein Thema von franktron · begonnen am 17. Mai 2005 · letzter Beitrag vom 17. Mai 2005
Antwort Antwort
Seite 1 von 2  1 2      
franktron

Registriert seit: 11. Nov 2003
Ort: Oldenburg
1.446 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#1

Was ist schneller einfügen oder bearbeiten

  Alt 17. Mai 2005, 15:42
Datenbank: MySQL • Version: 4.0x • Zugriff über: Unwichtig
Was ist schneller wenn man eine Datensatz einfügt oder wenn man guckt ob einer da ist und den bearbeitet
Frank
Tux sein Lieblingsquellcode
While anzfische<TuxSatt do begin
Fisch:=TFisch.Create; Tux.EssenFisch(Fisch); Fisch.Free;inc(anzfische); end;
  Mit Zitat antworten Zitat
bate

Registriert seit: 28. Jul 2004
Ort: Kahla
32 Beiträge
 
Delphi 7 Professional
 
#2

Re: Was ist schneller einfügen oder bearbeiten

  Alt 17. Mai 2005, 16:04
speed ist bei beiden der gleiche würd ich mal sagen. Der eigentliche unterschied ist die Abarbeitung im SQL Server ansich. Insert haben eine Niedrigere Priorität also Updates. Das heist wenn du Operationen machen willst die von dem Update/Insert abhängig sind dann würd ich dir vorschlagen ehr ein UPDATE zumachen. Sollte aber auf der DB eh nie was los sein ( wenig last ) dann ist es fast zu vernachlässigen.
  Mit Zitat antworten Zitat
Benutzerbild von freak4fun
freak4fun

Registriert seit: 22. Sep 2004
Ort: Hannover
1.807 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#3

Re: Was ist schneller einfügen oder bearbeiten

  Alt 17. Mai 2005, 16:25
Tja, bei fast vernachlässigbar ist die Frage wie viel Datensätze man prüft. Je mehr es sind, desto mehr wird es spürbar.
Ich weiß aber nicht ab wie viel es merkbar ist.

Vielleicht hast du ja die Zeit es mal zu testen.

MfG
freak
Christian
IT: Schließen Sie bitte das Fenster. User: Die Tür auch?
i++; // zaehler i um 1 erhoehen
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#4

Re: Was ist schneller einfügen oder bearbeiten

  Alt 17. Mai 2005, 16:28
@bate: Einspruch! Äh..na ja...
Bei MySQL muss man es probieren, aber bei einer richtigen DB , die also die Speicheroperation sofort physikalisch auf die Platte schreibt, und erst dann zum Client zurückkehrt, ist ein INSERT i.a. wesentlich aufwändiger, als ein SELECT/UPDATE.
INSERT fügt eine neue Zeile ein, die Indizes werden allesamt überarbeitet, die Daten werden geschrieben etc. Das ist schon ein ganz schöner Verwaltungsaufwand. Natürlich nur, wenn Indizes vorhanden sind.

SELECT kostet so gut wie nix, weil die Daten eh im Cache sind (na, meistens)
UPDATE kostet nur dann fast soviel wie ein INSERT, wenn wirklich alle Spalten verändert werden. Und selbst dann ist es noch etwas flinker, weil die Erzeugung eines neuen Datensatzes wegfällt.

Aber, was soll ich lange reden: Versuchs doch einfach. Obiges gilt für o.g. für MS-SQL. MySQL benutzt, glaube ich, kein direktes I/O, sondern schreibt irgendwann, weswegen es auch recht flott ist. Und unsicher. Und damit keine 'richtige' DB.

Ich würd's ausprobieren...
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
franktron

Registriert seit: 11. Nov 2003
Ort: Oldenburg
1.446 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#5

Re: Was ist schneller einfügen oder bearbeiten

  Alt 17. Mai 2005, 16:39
Zitat von alzaimar:
@bate: Einspruch! Äh..na ja...
Bei MySQL muss man es probieren, aber bei einer richtigen DB , die also die Speicheroperation sofort physikalisch auf die Platte schreibt, und erst dann zum Client zurückkehrt, ist ein INSERT i.a. wesentlich aufwändiger, als ein SELECT/UPDATE.
INSERT fügt eine neue Zeile ein, die Indizes werden allesamt überarbeitet, die Daten werden geschrieben etc. Das ist schon ein ganz schöner Verwaltungsaufwand. Natürlich nur, wenn Indizes vorhanden sind.
Daher ja meine frage
Frank
Tux sein Lieblingsquellcode
While anzfische<TuxSatt do begin
Fisch:=TFisch.Create; Tux.EssenFisch(Fisch); Fisch.Free;inc(anzfische); end;
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#6

Re: Was ist schneller einfügen oder bearbeiten

  Alt 17. Mai 2005, 16:47
Hat mySQL Bulk DML?
Wenn ja _könnten_ Inserts schneller sein. Schließlich kann die DB vorher die Werte in den Arrays inspizieren, sortieren und in einem günstigen Fall erübrigt sich ein Rebuild der Indizes.
Der Fall wären Werte, die aufsteigend sortiert eine direkte Folge ergeben und größer als bestehende Unique-Indizes sein würden.
Bei non Uniques kann bei Bulks direkt ein Update auf die nested tables hinter den Indizes gemacht werden. Solange keine neue Indizes dazwischengequetscht werden.
Ein INSERT hat nunmal keine WHERE clause.

Bei StiNo SQL werden wohl UPDATEs flotter sein, wenn die WHERE Clause nicht zu lahm ist. Schließlich ist die Wahrscheinlichkeit hoch, dass nicht alle Indizes geändert und somit neu aufgebaut werden.

Bei Bulk SELECTs spart man sich die round trips für die einzelnen Zeilen. Damit ist man oftmals 10 bis 100-mal (je nach Datenmenge) schneller als mit einem stupiden API->fetch->API->read->API->fetch->API->read->API->...


Aber wie gesagt, erst mit BULK Operationen kann die DB über mehrere Datensätzen optimieren und planen.
Mach' dich einfach mal schlau ob und wie mySQL das unterstützt.

Wobei das eine prima hypothetische Diskussion ist, die leider bezogen auf dein Problem keinerlei praktischen Hintergrund hat.
Im RL kommst du nicht drumrum zu schauen ob es etwas zum Aktualisieren gibt bzw. ob du es einfügen musst...
  Mit Zitat antworten Zitat
franktron

Registriert seit: 11. Nov 2003
Ort: Oldenburg
1.446 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#7

Re: Was ist schneller einfügen oder bearbeiten

  Alt 17. Mai 2005, 16:55
@Robert ich hab das momentan so

Löschen alles
Füge neue Datensätze hinzu
das geht auch recht schnell dauert aber abundzu bis zu 2 Sec.
und das nervt etwas und ich kann den Code leider nicht mehr weiter optemieren(ich find nix mehr was schneller ist) was soll ich da tun.
Frank
Tux sein Lieblingsquellcode
While anzfische<TuxSatt do begin
Fisch:=TFisch.Create; Tux.EssenFisch(Fisch); Fisch.Free;inc(anzfische); end;
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#8

Re: Was ist schneller einfügen oder bearbeiten

  Alt 17. Mai 2005, 17:09
Lustig, ist GENAU das, was ich gerade programmieren darf.
Ich mache es genauso wie Du, allerdings schmeiss ich alles in ein Skript und schicke das dann zum Server:
SQL-Code:
Delete from _Members where mID = 12345
insert into _Members (mID, oID) Values (12345,1)
...
insert into _Members (mID, oID) Values (12345,999)
Das geht recht flott. Ich merk jedenfalls nichts, selbst bei 100-300 Insert-Zeilen.

Packst Du auch alles in 1(!) Skript und schickst es dann zu mySQL?
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
franktron

Registriert seit: 11. Nov 2003
Ort: Oldenburg
1.446 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#9

Re: Was ist schneller einfügen oder bearbeiten

  Alt 17. Mai 2005, 17:10
Zitat von alzaimar:
Lustig, ist GENAU das, was ich gerade programmieren darf.
Ich mache es genauso wie Du, allerdings schmeiss ich alles in ein Skript und schicke das dann zum Server:
SQL-Code:
Delete from _Members where mID = 12345
insert into _Members (mID, oID) Values (12345,1)
...
insert into _Members (mID, oID) Values (12345,999)
Das geht recht flott. Ich merk jedenfalls nichts, selbst bei 100-300 Insert-Zeilen.

Packst Du auch alles in 1(!) Skript und schickst es dann zu mySQL?
Ne
Frank
Tux sein Lieblingsquellcode
While anzfische<TuxSatt do begin
Fisch:=TFisch.Create; Tux.EssenFisch(Fisch); Fisch.Free;inc(anzfische); end;
  Mit Zitat antworten Zitat
Benutzerbild von RavenIV
RavenIV

Registriert seit: 12. Jan 2005
Ort: Waldshut-Tiengen
2.875 Beiträge
 
Delphi 2007 Enterprise
 
#10

Re: Was ist schneller einfügen oder bearbeiten

  Alt 17. Mai 2005, 17:12
Zitat von alzaimar:
Das geht recht flott. Ich merk jedenfalls nichts, selbst bei 100-300 Insert-Zeilen.
100-300 Zeilen ist doch keine Arbeit für nen SQL-Server.
erweiter deinen befehl mal auf 100'000 Zeilen, dann wirst du eher einen unterschied sehen...

gruessle
Klaus E.
Linux - das längste Text-Adventure aller Zeiten...
Wer nie Linux mit dem vi konfiguriert hat, der hat am Leben vorbei geklickt.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 20:59 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