+-

在我的应用程序中,我的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是一个很好的起始大小.
更改批量大小,直到达到最佳吞吐量.
批量大小为1024是一个很好的起始大小.
更改批量大小,直到达到最佳吞吐量.
点击查看更多相关文章
转载注明原文:mysql – 为大批量插入速度 - 乐贴网