最好使用source方式比较快,先生成Sql文件
source命令导入时:如果一次性插入的数据太多,mysql会自动优化,拆开多次插入,如在导入时发现,一张表有100万左右数据,它每次插入是1万多条
wait_timeout = 120
max_allowed_packet = 32M
interactive_timeout = 120
#块插入缓存大小可提高数据插入的效率(默认是8M)(Source模式)
bulk_insert_buffer_size=32M
#每次tablespace扩展都会让各个Sql处于等待状态,增加自动扩展Size可以减少tablespace自动扩展次数
innodb_autoextend_increment=128
#1->每一次事务提交或事务外的指令都需要把日志写入硬盘,2->不写入硬盘而是写入系统缓存
innodb_flush_log_at_trx_commit=2
#此配置项作用设定innodb数据库引擎写日志缓存区,将此缓存段增大可以减少数据库写数据文件次数
innodb_log_buffer_size=16M
#此配置项作用设定innodb数据库引擎UNDO日志的大小,从而减少数据库checkpoint操作
innodb_log_file_size=128M
// 提高性能的其他注意:
插入之前将表锁定(只针对非事务处理型的表)(导出的Sql中已经有了:如LOCK TABLES test
WRITE;然后UNLOCK TABLES;)
// 还可使用LOAD DATA INFILE命令导入(他速度非常的快)
load data infile “test.txt” replace into table test character set utf8 fields terminated by ‘,’ enclosed by ‘"’ lines terminated by ‘\n’ (name
,age
,description
);
// 在事务中进行插入处理(事务太大可能会影响执行的效率,innodb_log_buffer_size配置项,超过这个值会把innodb的数据刷到磁盘中,这时效率会下降,较好的做法是:在数据达到这个这个值前进行事务提交)
START TRANSACTION;
INSERT INTO test
(id,col,date_time,users_id) VALUES (1,‘2’,‘2017-11-15 09:01:01’,’’),(2,‘1’,‘2017-11-15 09:01:01’,NULL);
COMMIT;
// 主键有序插入
由于数据库插入时,需要维护索引数据,无序的记录会增大维护索引的成本
/MySql中设置max_allowed_packet(默认单位为字节)的方式**********/
set global max_allowed_packet = 1024 * 1024 * 2 * 10;(这里有20M)
flush privileges;
show VARIABLES like ‘%max_allowed_packet%’;// 查看一下
/source导入模板样例**************************************************************************************/
use test;
DROP TABLE IF EXISTS test
;
CREATE TABLE test
(
id
int(10) unsigned NOT NULL AUTO_INCREMENT,
col
varchar(45) DEFAULT NULL,
date_time
datetime DEFAULT NULL,
users_id
varchar(45) DEFAULT NULL,
PRIMARY KEY (id
)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
LOCK TABLES test
WRITE;
INSERT INTO test
(id,col,date_time,users_id) VALUES (1,‘2’,‘2017-11-15 09:01:01’,’’),(2,‘1’,‘2017-11-15 09:01:01’,NULL);
UNLOCK TABLES;