我有一些像["happy","bad","terrible","awesome","happy","happy","horrible",.....,"love"].
这样的词
这些单词数量很多,可能超过100 ~ 200
。
我想同时将其保存到DB
。
我认为在每个单词上呼叫DB
连接是非常浪费的。
保存的最佳方式是什么?
table structure
wordId userId word
答案 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);
没有我们可以帮助的更多信息
您可以使用任何语言添加循环来迭代列表以添加它们。