2010-07-14 9 views
5

Dies ist eher eine theoretische Frage.Ist mysql UPDATE schneller als INSERT INTO?

Wenn ich 50.000 Abfragen ausführen, die neue Zeilen einfügen, und 50.000 Abfragen, die diese Zeilen aktualisiert, welche dauert weniger Zeit?

+3

Dies hängt von verschiedenen Faktoren ab. Haben die Tabellen Indizes? Aktualisieren Sie alle Spalten, die die Einfügung einfügen würde oder nur eine Teilmenge davon? Außerdem sehe ich die Relevanz dieser Frage nicht. Wenn Sie Zweifel haben, messen Sie für Ihren Anwendungsfall mit Ihren Daten ... –

+0

Ich würde vorschlagen, dass, da INSERT und UPDATE nicht dasselbe tun, der beste zu verwenden derjenige ist, der tut, was notwendig ist, und zum Teufel mit wie lange es dauert. Siehe http://c2.com/cgi/wiki?PrematureOptimization –

Antwort

4

Einfügen wäre schneller, da Sie bei der Aktualisierung zuerst nach dem Datensatz suchen müssen, den Sie aktualisieren möchten, und dann das Update durchführen.

Obwohl dies scheint kaum ein gültiger Vergleich, wie Sie nie eine Wahl haben, ob Sie einfügen oder aktualisieren, da die beiden zwei völlig unterschiedliche Bedürfnisse erfüllen.

EDIT: Ich sollte auch hinzufügen, dass dies mit der Annahme ist, dass es keine Insert-Trigger oder andere Situationen gibt, die potenzielle Engpässe verursachen könnten.

+3

nicht ganz richtig ... Sie könnten eine Tabelle haben, die 'letzte Anmeldung' mal auflistet. Sie können die Datensätze entweder aktualisieren oder bei jeder Anmeldung eines Benutzers neue Einträge hinzufügen. Ein solches Verhalten hängt jedoch auch von Zugriffszeiten, Tabellenwachstumsraten usw. ab. –

+2

Nicht unbedingt - Das Update könnte aufgrund von weniger Seitenaufteilungen je nachdem was schneller sein die gruppierten und andere Indizes sind und eine Vielzahl von anderen Faktoren. –

+0

Ich stimme zu, dass es Faktoren gibt, die dazu beitragen könnten, dass dies nicht der Fall ist. Aber ich denke, in den meisten Szenarien der alltäglichen Nutzer ist dies nicht der Fall. Aber ich könnte falsch liegen. – spinon

1

Mit einer Einfügung in die gleiche Tabelle können Sie immer alle Zeilen mit einer Abfrage einfügen, was es viel schneller macht, als nacheinander einzufügen. Bei der Aktualisierung können Sie mehrere Zeilen gleichzeitig aktualisieren, aber Sie können dies nicht auf jede Aktualisierungssituation anwenden, und oft müssen Sie jeweils eine Aktualisierungsabfrage ausführen (wenn Sie eine bestimmte ID aktualisieren) - und auf einer großen Tabelle ist dies sehr langsam die Zeile finden und dann jedes Mal aktualisieren. Es ist auch langsamer, auch wenn Sie den Tisch nach meiner Erfahrung indiziert haben.

4
Insert Operation : Create -> Store 

Update Operation : Retrieve -> Modify -> Store 

Einfügen Operation schneller.

0

Nebenbei, vergessen Sie nicht, dass wenn Sie mehr Einfügungen als Updates, Sie mehr Zeilen haben, wenn Sie zur Auswahl kommen, so verlangsamen Sie die Leseoperation.

Die eigentliche Frage wird dann - was interessiert dich mehr, eine schnelle Einfügung oder ein schnelles Lesen. Dies ist wiederum abhängig von bestimmten Faktoren - insbesondere (und noch nicht erwähnt) DB-Engine, wie InnoDB (die jetzt übrigens in PHPMyAdmin Standard ist).

Ich stimme jedoch allen anderen zu - es gibt zu viel, um von Fall zu Fall zu denken und deshalb müssen Sie wirklich Ihre eigenen Tests durchführen und die Situation von dort basierend auf Ihren Bedürfnissen beurteilen.