Sie haben recht, dass wiederholte INSERT-Anweisungen zum Einfügen von Zeilen nacheinander ausgeführt werden, d. H. Die Verarbeitung von RBAR (Zeile nach quälender Zeile) kann in MySQL teuer und quälend langsam sein.
Unter der Annahme, dass Sie den String-Wertes einfügen („Worte“) in eine Spalte in einer Tabelle, und jedes Wort wird als neue Zeile in der Tabelle eingefügt werden ... (und das ist eine ganze Menge Annahmen dort ...)
zum Beispiel kann eine Tabelle wie folgt aus:
CREATE TABLE mytable (mycol VARCHAR(50) NOT NULL PRIMARY KEY) ENGINE=InnoDB
Sie haben Recht, dass für jede Zeile eine separate INSERT-Anweisung ausgeführt wird teuer. MySQL bietet eine Erweiterung für die Syntax der INSERT-Anweisung, die es ermöglicht, mehrere Zeilen einzufügen.
Zum Beispiel diese Sequenz:
INSERT IGNORE INTO mytable (mycol) VALUES ('happy');
INSERT IGNORE INTO mytable (mycol) VALUES ('bad');
INSERT IGNORE INTO mytable (mycol) VALUES ('terrible');
kann mit dem einzigen INSERT-Anweisung
INSERT IGNORE INTO mytable (mycol) VALUES ('happy'),('bad'),('terrible');
Jede „Zeile“ emuliert werden in Pars eingefügt werden eingeschlossen, so wie es in der regulären ist INSERT-Anweisung. Der Trick ist das Komma-Trennzeichen zwischen den Zeilen.
Das Problem damit tritt auf, wenn es Einschränkungsverletzungen gibt; Entweder gelingt die ganze Aussage oder sie versagt. Im Gegensatz zu den einzelnen Beilagen, bei denen einer von ihnen versagen kann und die anderen beiden Erfolg haben. Stellen Sie sicher, dass die Größe (in Byte) der Anweisung die max_allowed_packet
Variableneinstellung nicht überschreitet.
Alternativ kann eine LOAD DATA
Aussage ist ein noch schnellerer Weg Zeilen in eine Tabelle zu laden. Aber für ein paar hundert Zeilen wird es nicht wirklich viel schneller. (Wenn Sie wurden Tausende und Tausende von Zeilen, die LOAD DATA-Anweisung könnte möglicherweise viel schneller geladen werden
Blick auf insert_batch oder multi_query() -Funktionen auch:.. Http: // Stackoverflow.com/questions/779986/insert-multiple-rows-über-ein-php-array-in-mysql – Sami