有两张表,表a和表b,表的数据库引擎都是innoDB,都设置aotocommit为false,现在分别向两张表插入100多万的数据,均为批量插入。发现插入表a的速度挺快的,而插入表b的速度在10万以内蛮快的,而在10万以上比较慢,每次批量插入都要挺长时间,不知道为什么,向大家请教一下。 表a的字段类型为:三个TEXT,一个LONGTEXT,一个INT(11)。表b的字段类型为一个TEXT,一个INT(11) 批量插入的语句为:
int numBatch = 0;
while(){
++numBatch;
//.....中间有代码省略
insert.addBatch();
if(numBatch % 10000 == 0){
insert.executeBatch();
localDBcon.commit();
System.out.println(numBatch);
}
}
int numBatch = 0;
while(){
++numBatch;
//.....中间有代码省略
insert.addBatch();
if(numBatch % 10000 == 0){
insert.executeBatch();
localDBcon.commit();
System.out.println(numBatch);
}
}
+-------------------------+---------+
| Variable_name | Value |
+-------------------------+---------+
| bulk_insert_buffer_size | 8388608 |
+-------------------------+---------+
1 row in set (0.00 sec)
我知道myisam的这个参数 限制缓冲大小 但是innodb还不知道 可能是你的内存IO消耗太大了增加点缓冲内存
有这种可能。
另外就是你的ibdata初始化的时候是多大? 如果一开始是100 M, 则当用完后,你的扩展设置是多少?是否由过多的磁盘空间申请次数造成?不过你的试验“表a没有主键,插入速度不变。”则估计主要是索引引起的了。