建表
用户表
CREATE TABLE `user` (
`id` BIGINT (20),
`name` VARCHAR(20)
)ENGINE=INNODB;
日志表
CREATE TABLE `log` (
`id` BIGINT (20),
`msg` VARCHAR(20)
)ENGINE=INNODB;
在mysql控制台执行
1.建立存储过程
DELIMITER $$
USE `tiantian`$$
DROP PROCEDURE IF EXISTS `pro_test_data`$$
CREATE DEFINER=`dev_user`@`%` PROCEDURE `pro_test_data`( pos_begin INT,pos_end INT)
BEGIN
DECLARE i INT;
SET i=pos_begin;
SET AUTOCOMMIT=0;
WHILE i>=pos_begin && i<= pos_end DO
INSERT INTO tiantian.`user` (`id`, `name`) VALUES(i,'admin');
SET i=i + 1; # 接下来判断20W一批次就commit一回。
IF MOD(i,200000)<=0 THEN
INSERT INTO log(id,msg)VALUES(i,'begin to commmit a group insert sql data.');
COMMIT;
END IF;
END WHILE;
END$$
DELIMITER ;
2.优化存储过程
# 录入数据的时候,不写入binlog,加快数据录入
set sql_log_bin=0;
call tiantian.pro_test_data(0,100000000);
Query OK, 1 row affected (14.51 sec)
结果仅需要14秒
关联文章 : php操作mysql迅速插入上百万数据