mysql:现在插入vs收集许多插入语句然后插入

时间:2016-09-28 12:29:27

标签: mysql sql

我应该使用哪一个?假设每秒都会生成一个insert语句,我应该收集100/1000个insert语句,然后一次执行批量插入吗?或者只是在系统生成一个时插入一个?

2 个答案:

答案 0 :(得分:1)

您应根据自己的情况决定采用哪种方法。

[示例1]

INSERT INTO test_table (col1, col2) values (1,"value1"),(2,"value2"), (3,"value3");

[示例2]

INSERT INTO test_table (col1, col2) values (1,"value1");
INSERT INTO test_table (col1, col2) values (2,"value2");
INSERT INTO test_table (col1, col2) values (3,"value3");

示例1中的插入将比示例2快10倍或更多倍。 但是,如果其中一个操作失败,例如通过UNIQUE KEY,所有事务都将被中断,因此您无法正确插入所有数据。因此,一个全局插入可以提高性能,多个插入可以提供更大的灵活性。

答案 1 :(得分:0)

正如@eggyal建议的那样,这取决于你的工作量:

  • 每行插入的大小是多少?如果它相当小,那么通常如果你每秒产生一个,那么在你提交之前每秒插入或累积1000/10000可能无关紧要。
  • 您需要什么样的耐久性?如果您需要确保每个插件在请求时将其转到磁盘,那么您需要每秒一个或更少的插件与服务器的最高耐久性设置配对。如果你正在缓存其他地方的行,即Redis,并且在将插件批量编辑到MySQL之前对它感到满意,那么它可以为你工作,只要Redis上的耐久性设置适合你。