将多行同时保存到DB的最佳方法是什么?

时间:2016-05-31 23:14:13

标签: mysql sql node.js database dbconnection

我有一些像["happy","bad","terrible","awesome","happy","happy","horrible",.....,"love"].这样的词 这些单词数量很多,可能超过100 ~ 200

我想同时将其保存到DB。 我认为在每个单词上呼叫DB连接是非常浪费的。

保存的最佳方式是什么?

table structure
wordId userId word

2 个答案:

答案 0 :(得分:4)

你是正确的,执行重复的INSERT语句一次插入一行,即在MySQL中处理RBAR(通过痛苦排行)可能是昂贵的,而且速度极慢。

假设您正在将字符串值(“单词”)插入表中的一列中,并且每个单词将作为表中的新行插入...(这就是那里的一大堆假设.. 。)

例如,像这样的表:

 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');

要插入的每个“行”都包含在parens中,就像在常规INSERT语句中一样。技巧是行之间的逗号分隔符。

当存在约束违规时,会遇到麻烦;要么整个​​陈述成功,要么失败。与单个插入不同,其中一个插入可能失败,另外两个插入成功。

另外,请注意语句的大小(以字节为单位)不要超过max_allowed_packet变量设置。

或者,LOAD DATA语句是将行加载到表中的更快方法。但是对于几百行,它实际上并不会快得多。 (如果您正在加载数千和数千行,则LOAD DATA语句可能会更快。

答案 1 :(得分:1)

知道你正在生成那些单词列表会有所帮助,但你可以做到      插入表(列)值(word),(word2);

没有我们可以帮助的更多信息

您可以使用任何语言添加循环来迭代列表以添加它们。