我有个innodb表,大约10个字段,其中6个有建索引,还有4个外键关系。在插入25w条记录的时候,1个小时没完成。对于innodb类型的数据表,对于大数据量情况下,在配置上大家有什么建议?

解决方案 »

  1.   

    大数据量的插入
    之前先
    alter table tablename disable keys;
    插入。
    而且用MYSQL的批量插入语法。
    insert into tablename values(),...,();
    完了后
    alter table tablename enable keys;
      

  2.   

    楼上的意思就是在插入的时候先把keys失效,你也可以把索引删除,插入完成后在创建。
      

  3.   

    有人做的测试:1. time=4706s, avs=2124行/s 
    --- innodb_buffer_pool_size = 512M,thread_concurrency = 2 
    --- 观测 idb 文件的生成情况,越往后长得越慢,前一个G和最后一个G的增长速度相差 8 倍以上 2. time=3317s, avs=3014行/s 
    --- innodb_buffer_pool_size = 3*512M,thread_concurrency = 2 
    --- innodb_buffer_pool_size 大小对速度有相当的影响3. time=3101s, avs=3224行/s 
    --- innodb_buffer_pool_size = 3*512M,thread_concurrency = 2, unique key -> normal key 
    --- unique key 对速度有一定的影响,小于 10%4. time=954s, avs=10482行/s 
    --- 从测试 3 得出的表,改变表类型 alter table tl_test_log ENGINE=MyISAM 
    --- key_buffer_size = 192M 
    --- InnoDB 的 alter table 效率,本次测试中三倍落后于 MyISAM5. time=554s, avs=5392行/s, count(id)=2,933,380 
    --- 测试条件同 2,行数将近原 10M 的 1/3 
    --- 保证索引数据能完全存放在内存中:index length: 3.8G/3=1.3G < innodb_buffer_pool_size = 3*512M 
    --- 前 3M 行记录的插入速度,相对于测试 2 有 78% 的效率提升,显然是之后的插入速度降低拖累了测试 2 的总体成绩6. time=238s, avs=12325行/s, count(id)=2,933,380 
    --- 测试条件同 4,行数将近原 10M 的 1/3 
    --- 前 3M 行记录的插入速度,相对于测试 4 有 17% 的效率提升,显然是之后的插入速度降低拖累了测试 4 的总体成绩 
    --- 对比测试 5,可知之后的插入速度降低幅度,InnoDB >> MyISAM 
    --- 动态察看文件生成大小的变化幅度,比如每次增长的时间间隔,可以有更直观的了解只是修改索引,效果不会很明显,因为最后实际你还是要把索引加上,加索引在大数据量情况下一样很花时间。我们更看重的是完整过程所花时间。