数据库里面有张表,千万到亿级别的数据。有一个唯一索引和另外几个索引。
这个表主要用来进行插入操作,插入过程中唯一索引重复时进行其他字段的更新。
很少对这个表进行检索。想请教大家,怎么才能把这个数据库的插入操作速度弄到最大呢?
想到的有:调参数,分区。
可是,参数该怎么调呢。另外,分区能提高插入操作速度吗?
这个表主要用来进行插入操作,插入过程中唯一索引重复时进行其他字段的更新。
很少对这个表进行检索。想请教大家,怎么才能把这个数据库的插入操作速度弄到最大呢?
想到的有:调参数,分区。
可是,参数该怎么调呢。另外,分区能提高插入操作速度吗?
insert into a values(...) --> insert into a values(..),(..),(...)
2: 把插入改成load data from file -->可以提高20倍
3:在插入前disable key,插入后再enable key.
4: 把表类型改成MYISAM,在插入时少一些事务的额外操作,也能提高效率。
5:分表,程序处理,进行并发插入。
1:insert_buffer_size
2: innodb_flush_log_at_trx_commit
3: innodb_file_per_table=1
4: sync_binlog
你好,谢谢回复。1.
我现在用的就是load data from file方法。
原来用的MYISAM表,但是发现数据上千万以后再进行十万以上的插入时,速度明显下降(或者说是忽快忽慢不稳定),所以后来换成了InnoDB。我稍后再换回去好好试试。2.
由于有一个唯一列要判断,现在还不知道该怎么进行并行处理。3.
分表有时候可以提供查询速度,但是对于这样的插入操作,是不是会反而更慢呢。
再就是,最好能够先用页面脚本把数据处理一下,再交给mysql插入。使得mysql不需要做任何判断。
再就是,不一定是一次插入的数据量越大,多次插入总的速度越高。
如果是MyISAM,可以考虑尽量增大键缓存,使扫描尽快完成。
如果是InnoDB,可以考虑增大缓冲池的尺寸。