数据库里面有张表,千万到亿级别的数据。有一个唯一索引和另外几个索引。
这个表主要用来进行插入操作,插入过程中唯一索引重复时进行其他字段的更新。
很少对这个表进行检索。想请教大家,怎么才能把这个数据库的插入操作速度弄到最大呢?
想到的有:调参数,分区。
可是,参数该怎么调呢。另外,分区能提高插入操作速度吗?

解决方案 »

  1.   

    1:把单个插入合并成批量插入
    insert into a values(...)  -->  insert into a values(..),(..),(...)
    2: 把插入改成load data from file  -->可以提高20倍
    3:在插入前disable key,插入后再enable key.
    4: 把表类型改成MYISAM,在插入时少一些事务的额外操作,也能提高效率。
    5:分表,程序处理,进行并发插入。
      

  2.   

    系统参数方面
    1:insert_buffer_size
    2: innodb_flush_log_at_trx_commit 
    3: innodb_file_per_table=1
    4: sync_binlog
      

  3.   


    你好,谢谢回复。1.
    我现在用的就是load data from file方法。
    原来用的MYISAM表,但是发现数据上千万以后再进行十万以上的插入时,速度明显下降(或者说是忽快忽慢不稳定),所以后来换成了InnoDB。我稍后再换回去好好试试。2.
    由于有一个唯一列要判断,现在还不知道该怎么进行并行处理。3.
    分表有时候可以提供查询速度,但是对于这样的插入操作,是不是会反而更慢呢。
      

  4.   

    是否可以考虑使用存储程序?
    再就是,最好能够先用页面脚本把数据处理一下,再交给mysql插入。使得mysql不需要做任何判断。
    再就是,不一定是一次插入的数据量越大,多次插入总的速度越高。
      

  5.   

    我觉得这里插入性能的瓶颈在于唯一键的判断,这需要对唯一键进行扫描。
    如果是MyISAM,可以考虑尽量增大键缓存,使扫描尽快完成。
    如果是InnoDB,可以考虑增大缓冲池的尺寸。