+-
mysql – 为大批量插入速度
在我的应用程序中,我的INSERT似乎占据了很大一部分时间.我在内存中有大量的对象(~40-50,000),我想插入表中.

让我们拿一个样本表

CREATE TABLE bill (
id BIGINT(20) PRIMARY KEY,
amount INT(11) DEFAULT 0,
bill_date DATETIME DEFAULT NOW(),
INDEX (bill_date)
) ENGINE=InnoDB

以3行作为我的批量大小,以下是我可以想到的插入方法

方法1 – 构造并点燃3个原始插入物

INSERT INTO bill (amount, bill_date) VALUES (10, '2012-01-01 00:00:00');
INSERT INTO bill (amount, bill_date) VALUES (20, '2012-01-02 00:00:00');
INSERT INTO bill (amount, bill_date) VALUES (40, '2013-02-05 00:00:00');

方法2 – 将值分为1个查询

INSERT INTO bill (amount, bill_date) VALUES 
(10, '2012-01-01 00:00:00'),
(20, '2012-01-02 00:00:00'),
(40, '2013-02-05 00:00:00');

方法3 – 通过6个参数触发此查询1次

INSERT INTO bill (amount, bill_date) VALUES 
(?, ?), (?, ?), (?, ?);

方法4 – 每次更改2个参数时,激活此准备好的查询3次

INSERT INTO bill (amount, bill_date) VALUES (?, ?);

欢迎任何其他方法.

我的问题是

在表中进行多次插入的最快方法是什么?

我读过this link on mysql insert speed和this guide to JDBC programming,但我无法得出结论.

我的情况 –

目前我的表有大约20列,其中大多数是数字,有几个varchar(60)和1个文本列. Mysql 5.5版.
在INNODB上运行并在Integer主键上有1个索引.
所有查询都在事务中运行.

我从Java构造我的查询并使用Spring JDBC来运行查询.

我目前正在遵循方法3,对于空表,需要大约10秒才能进行20,000次插入,不包括构建查询所需的时间.

为了保持透视,它需要100-200毫秒来从表中获取数据.

有什么我想念的吗?
如何使插入更快?

最佳答案
考虑批量提交.
批量大小为1024是一个很好的起始大小.
更改批量大小,直到达到最佳吞吐量.
点击查看更多相关文章

转载注明原文:mysql – 为大批量插入速度 - 乐贴网