首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Jdbc和Mysql中使用预准备语句进行批插入非常慢

在Jdbc和Mysql中使用预准备语句进行批插入非常慢
EN

Stack Overflow用户
提问于 2012-11-01 21:15:04
回答 1查看 443关注 0票数 2

在Jdbc和Mysql中使用准备好的语句进行批量插入的速度非常慢,我正在尝试插入30000万条记录。记录被分成29个表,我尝试了每批2000条和1000条记录,插入时间分别为20分钟和10分钟,只有一个表有20列剩余,所有表都有3到6列

Java代码在5秒内读取10000行,但批量插入需要90分钟的时间

我在Windows 7上使用4 4gb的内存

我的Mysql my.ini配置是

代码语言:javascript
复制
[client]

port=3306

[mysql]

default-character-set=latin1

[mysqld]

max_allowed_packet=100M
wait_timeout=3000

port=3306

basedir="C:/Program Files (x86)/MySQL/MySQL Server 5.1/"

datadir="C:/ProgramData/MySQL/MySQL Server 5.1/Data/"

default-character-set=latin1

default-storage-engine=INNODB

sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

max_connections=100

query_cache_size=0

table_cache=256

tmp_table_size=33M

thread_cache_size=8

myisam_max_sort_file_size=100G

myisam_sort_buffer_size=66M

key_buffer_size=53M

read_buffer_size=64K
read_rnd_buffer_size=256K

sort_buffer_size=256K

innodb_additional_mem_pool_size=3M

innodb_flush_log_at_trx_commit=1

innodb_log_buffer_size=2M

innodb_buffer_pool_size=206M

innodb_log_file_size=52M

innodb_thread_concurrency=10
EN

回答 1

Stack Overflow用户

发布于 2012-11-01 21:28:52

我的建议是对所有表的索引执行DROP操作,对行执行INSERT操作,然后重新创建索引。如果数据库不需要为插入的每一行更新索引,那么它可以更快地插入数据。而且,从头开始创建索引比使用“随机”插入序列构建索引更快。

如果您可以按主键顺序对各个表的行进行排序,并按该顺序插入它们,也可能会有所改善。

最后,批处理是大量小请求的成本和处理大/长事务的成本之间的权衡。尝试尝试比当前使用的批处理大小更小和更大的批处理大小。

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

https://stackoverflow.com/questions/13177894

复制
相关文章

相似问题

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