首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >同时将多行保存到DB的最佳方法是什么?

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

Stack Overflow用户
提问于 2016-05-31 23:14:13
回答 2查看 558关注 0票数 0

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

我想同时将它保存到DB。我认为在每一个单词上调用DB连接都是非常浪费的。

什么是最好的储蓄方式?

代码语言:javascript
复制
table structure
wordId userId word
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-05-31 23:28:59

您是正确的,在MySQL中执行重复的INSERT语句一次插入一个行,即处理RBAR (按痛苦的行排列)可能代价高昂,而且速度慢得惊人。

假设您要将字符串值(“word”)插入到表中的列中,并且每个单词将作为表中的新行插入.(这是很多假设.)

例如,像这样的表:

代码语言:javascript
复制
 CREATE TABLE mytable (mycol VARCHAR(50) NOT NULL PRIMARY KEY) ENGINE=InnoDB

您是正确的,为每一行运行单独的INSERT语句是昂贵的。MySQL为INSERT语句语法提供了一个扩展,允许插入多个行。

例如,这个序列:

代码语言:javascript
复制
INSERT IGNORE INTO mytable (mycol) VALUES ('happy');
INSERT IGNORE INTO mytable (mycol) VALUES ('bad');
INSERT IGNORE INTO mytable (mycol) VALUES ('terrible');

可以用单个INSERT语句进行模拟。

代码语言:javascript
复制
INSERT IGNORE INTO mytable (mycol) VALUES ('happy'),('bad'),('terrible');

要插入的每一行都用parens括起来,就像在常规INSERT语句中一样。诀窍是行之间的逗号分隔符。

当存在违反约束的情况时,问题就出现了;要么整个语句成功,要么失败。与单独的插入不同,其中一个可以失败,另两个可以成功。

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

或者,LOAD DATA语句是将行加载到表中的一种更快的方法。但是对于几百行,它并不会更快。(如果您正在加载数千行,那么LOAD数据语句可能会更快。

票数 4
EN

Stack Overflow用户

发布于 2016-05-31 23:19:39

知道您正在生成这个单词列表会很有帮助,但是您可以在表(列)值(word),(Word2)中插入;

如果没有更多的信息,那将是我们所能帮助的。

您可以在任何需要迭代列表的语言中添加一个循环来添加它们。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37557093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档