有两张表,表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);
}
     }  

解决方案 »

  1.   

    是不是跟longtext数据类型有关系也有可能和你的配置设置有关系
      

  2.   

    表间关系、主键、外键、约束、索引、TRIGGER等等,贴出来看看
      

  3.   

    两个表是独立的,表b有一个主键,无索引,无约束,无外键,都无。表a无主键,表a虽然有longtext类型,但插入百万数据不慢,而是表b插入前10万不慢,后面就开始变慢了。可能跟数据库的配置有关吧
      

  4.   

    mysql> show variables like "%bulk_insert%";
    +-------------------------+---------+
    | Variable_name           | Value   |
    +-------------------------+---------+
    | bulk_insert_buffer_size | 8388608 |
    +-------------------------+---------+
    1 row in set (0.00 sec)
    我知道myisam的这个参数 限制缓冲大小 但是innodb还不知道 可能是你的内存IO消耗太大了增加点缓冲内存
      

  5.   


    有这种可能。
    另外就是你的ibdata初始化的时候是多大? 如果一开始是100 M, 则当用完后,你的扩展设置是多少?是否由过多的磁盘空间申请次数造成?不过你的试验“表a没有主键,插入速度不变。”则估计主要是索引引起的了。