mysql大量数据插入探讨(量变引发质变)

 分类:见Visio图mysql

 关于大量数据导入是应注意如下几点:sql

  1. 分批导入,导入一批后最后提交(commit),可使用jdbc的(executeBatch)批量处理可是注意它的最大上限,不然只会执行一部分sql语句,超过上限的sql会自动丢弃;数据库

  2. 注意内存使用(不要出现内存益出, Java heap space;并发

  3. 尽可能使用大量导入工具(bcp,sqlLoader)来完成(未测试不肯定) ;工具

  4. 数据量很大时导入时最好不要作太多的判断,这样会影响导入速度;性能

  5. 数据量很大时:是在建表时候添加主键(假设主键不是自增加ID列)后插入数据,仍是插入数据后添加主键,前者主要的问题是大量数据插入速度减慢,若是是频繁的插入操做会致使数据库奔溃;后者的问题也是大量数据的表添加主键(须要删除重复记录,并根据mysql本身的添加主键机制来处理,速度很慢,并且频繁的操做也会致使数据库的奔溃);测试

  6. 若是原数据表中有索引,先删除索引,待到导入数据后再创建索引;(主键是惟一索引的特列,这也是 5.中所述的优化

  7. 因为数据量大的缘由,须要配置mysql的my.ini 文件中相关选项,这个过程当中若是不是很明白各个参数之间的相关关系,则须要一个参数一个参数的修改,从而提升mysql的总体性能;ui

  8. insert 语句的处理而言,用StringBuilder代替“+”其性能是个质的提升;spa

  9. 利用jdbc支持的批量插入(preparedstatement),手动控制事务(将插入的数据分割为屡次提交),从而此番优化的程序可达到多线讲程并发高效插入的时效;

  10. 使用create table select *from soucre.table 方式建表和show create table tablename方式建表是不相同的,后者创建的表是和原来的表source.table 结构相同的,可是前者的建表方式获得的表结构是没有主键的;