2016-05-31 2 views
0

У меня есть несколько слов, таких как ["happy","bad","terrible","awesome","happy","happy","horrible",.....,"love"]. Эти слова большие, чем 100 ~ 200.Каков наилучший способ сохранения нескольких строк в DB одновременно?

Я хочу сохранить это до DB в то же время. Я думаю, что звонить на DB связи на каждое слово настолько расточительно.

Что такое лучший способ сэкономить?

table structure 
wordId userId word 
+0

Посмотрите на insert_batch или multi_query() функции . Также:. Http: // StackOverflow.com/questions/779986/insert-multiple-rows-via-a-php-array-in-mysql – Sami

ответ

1

Было бы полезно знать, вы создаете этот список слов, но вы могли бы сделать вставку в таблицу (колонки) значения (слово), (word2);

Без дополнительной информации, что составляет примерно столько же, сколько мы можем помочь

Вы можете добавить петлю на любом языке, необходимая для итерации по списку, чтобы добавить их.

+0

Ответ Spencer7593 более полный. – happymacarts

+0

Большое вам спасибо ~~~: D –

4

Вы правы в том, что выполняете повторяющиеся инструкции INSERT для вставки строк по одному. I.e обработка RBAR (строка из агонизирующей строки) может быть дорогостоящей и мучительно медленной в MySQL.


Предполагая, что вы вставляете строковые значения («слова») в столбец в таблице, и каждое слово будет вставлено в новую строку в таблице ... (и это в целом много допущения там ...)

Например, таблицу, как это:

CREATE TABLE mytable (mycol VARCHAR(50) NOT NULL PRIMARY KEY) ENGINE=InnoDB 

Вы правы, что работает отдельный оператор INSERT для каждой строки стоит дорого. MySQL предоставляет расширение синтаксиса оператора INSERT, который позволяет вставлять несколько строк.

Например, эта последовательность:

INSERT IGNORE INTO mytable (mycol) VALUES ('happy'); 
INSERT IGNORE INTO mytable (mycol) VALUES ('bad'); 
INSERT IGNORE INTO mytable (mycol) VALUES ('terrible'); 

Может эмулировать с одним INSERT заявление

INSERT IGNORE INTO mytable (mycol) VALUES ('happy'),('bad'),('terrible'); 

Каждая «строка» для вставки заключена в круглые скобки, так же, как это в очередной Инструкция INSERT. Трюк - это разделитель запятой между строками.

Проблема с этим возникает, когда есть нарушения ограничений; либо все заявление успешно завершается или не выполняется. В отличие от отдельных вставок, где один из них может выйти из строя, а два других - добиться успеха.

Кроме того, будьте осторожны, чтобы размер (в байтах) инструкции не превышал значение переменной max_allowed_packet.


В качестве альтернативы, LOAD DATA утверждения является еще более быстрым способом загрузки строк в таблицу. Но за пару сотен строк это не будет намного быстрее. (Если вы загружались тысячи и тысячи строк, оператор LOAD DATA потенциально может быть намного быстрее


+0

Большое вам спасибо! Это очень полезно для меня! –

+0

Принять этот ответ – happymacarts

Смежные вопросы