[英]Batch Insertions Using Prepared Statements in Jdbc with Mysql are very slow
使用Jdbc和Mysql在Jdbc中使用预处理语句进行批处理插入非常缓慢,我正在尝试插入300万条记录。 记录被分为29个表,我尝试了每批2000和1000条记录,插入时间分别为20分钟和10分钟,只有一个表有20列,其余所有表的列从3到6
Java代码在5秒内读取10000行,但是批量插入需要90分钟的时间
我正在使用Windows 4GB的Windows 7
[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
我的建议是DROP
所有表的索引, INSERT
行,然后重新创建索引。 如果数据库不需要为插入的每一行更新索引,则可以更快地插入数据。 与使用“随机”插入序列构建索引相比,从头开始创建索引的速度更快。
如果您可以将各个表的行按主键顺序排序,然后按该顺序插入它们,则可能也会有所改善。
最后,批处理是许多小请求的成本与进行大/长交易的成本之间的权衡。 尝试试验小于和大于当前使用的批量大小。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.