将多行同时保存到数据库的最佳方法是什么?
What is the best way to saving many rows to DB at the same time?
我有一些像["happy","bad","terrible","awesome","happy","happy","horrible",.....,"love"].
这样的词
这些词数量众多,可能超过100 ~ 200
。
我想同时将其保存到 DB
。
我认为每个字都调用 DB
连接太浪费了。
最好的保存方式是什么?
table structure
wordId userId word
知道您正在生成单词列表会很有帮助,但您可以
插入 table(列)值(字),(字 2);
没有更多信息,我们只能提供尽可能多的帮助
您可以使用任何需要的语言添加一个循环来遍历列表以添加它们。
你是对的,执行重复的 INSERT 语句一次插入一行,即处理 RBAR(逐行痛苦地处理)在 MySQL.
中可能很昂贵,而且非常慢
假设您要将字符串值 ("words") 插入到 table 的列中,并且每个单词将作为新行插入 table.. .(那里有很多假设......)
例如,table这样的:
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');
要插入的每个 "row" 都包含在括号中,就像在常规 INSERT 语句中一样。诀窍是行之间的逗号分隔符。
当存在约束违规时,问题就来了;整个语句要么成功要么失败。与单独的插入不同,其中一个可能失败而另外两个成功。
此外,请注意语句的大小(以字节为单位)不要超过 max_allowed_packet
变量设置。
或者,LOAD DATA
语句是一种将行加载到 table 中的更快方法。但是对于几百行,它并不会真正快很多。 (如果您要加载成千上万行,LOAD DATA 语句可能会快得多。
我有一些像["happy","bad","terrible","awesome","happy","happy","horrible",.....,"love"].
这样的词
这些词数量众多,可能超过100 ~ 200
。
我想同时将其保存到 DB
。
我认为每个字都调用 DB
连接太浪费了。
最好的保存方式是什么?
table structure
wordId userId word
知道您正在生成单词列表会很有帮助,但您可以 插入 table(列)值(字),(字 2);
没有更多信息,我们只能提供尽可能多的帮助
您可以使用任何需要的语言添加一个循环来遍历列表以添加它们。
你是对的,执行重复的 INSERT 语句一次插入一行,即处理 RBAR(逐行痛苦地处理)在 MySQL.
中可能很昂贵,而且非常慢假设您要将字符串值 ("words") 插入到 table 的列中,并且每个单词将作为新行插入 table.. .(那里有很多假设......)
例如,table这样的:
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');
要插入的每个 "row" 都包含在括号中,就像在常规 INSERT 语句中一样。诀窍是行之间的逗号分隔符。
当存在约束违规时,问题就来了;整个语句要么成功要么失败。与单独的插入不同,其中一个可能失败而另外两个成功。
此外,请注意语句的大小(以字节为单位)不要超过 max_allowed_packet
变量设置。
或者,LOAD DATA
语句是一种将行加载到 table 中的更快方法。但是对于几百行,它并不会真正快很多。 (如果您要加载成千上万行,LOAD DATA 语句可能会快得多。