2016-05-31 12 views
0

Ich habe einige Wörter wie ["happy","bad","terrible","awesome","happy","happy","horrible",.....,"love"]. Diese Wörter sind in der Zahl groß und überschreiten 100 ~ 200 möglicherweise.Was ist der beste Weg, um viele Zeilen gleichzeitig in der DB zu speichern?

Ich möchte das zu DB zur gleichen Zeit speichern. Ich denke an DB Verbindung bei jedem Wort ist so verschwenderisch.

Was ist der beste Weg zu speichern?

table structure 
wordId userId word 
+0

Blick auf insert_batch oder multi_query() -Funktionen auch:.. Http: // Stackoverflow.com/questions/779986/insert-multiple-rows-über-ein-php-array-in-mysql – Sami

Antwort

1

Es wäre hilfreich wissen Sie, dass die Liste von Wörtern zu erzeugen, aber man könnte in Tabelle einfügen (Spalte) Werte (Wort) tun, (word2);

Ohne weitere Informationen, die in etwa so viel, wie wir

helfen können, Sie könnten eine Schleife hinzufügen, in welcher Sprache benötigt wird, über die Liste zu durchlaufen, um sie hinzuzufügen.

+0

Spencer7593 Antwort ist vollständiger. – happymacarts

+0

Vielen Dank ~~~: D –

4

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


+0

Vielen Dank! Es ist sehr hilfreich für mich! –

+0

Akzeptieren Sie diese Antwort – happymacarts

Verwandte Themen