环境:mysql5.7.25下的InnoDB存储引擎
查看mysql版本号:
SELECT VERSION();
开启 show profiles 查询sql耗时
-- 开启show profiles;
mysql> set profiling = 1;
Query OK, 0 rows affected
-- 执行相对应sql
--查看sql耗时情况
mysql> show profiles;
1. 批量插入数据
1. 创建数据表
CREATE TABLE `t1` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`t1_col` varchar(100) DEFAULT NULL,
`t1_col2` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `t4` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`t4_col` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
注意为了快速插入数据,两个表均未建立索引。
2. 创建存储过程快速插入数据:
-- 存储过程要是存在,先进行删除
DROP PROCEDURE IF EXISTS my_insert;
-- 定义存储过程
CREATE PROCEDURE my_insert()
BEGIN
DECLARE m,n int DEFAULT 0;
START TRANSACTION; -- 开启事务,关闭自动提交
loopname1:LOOP
INSERT INTO t1(t1_col,t1_col2) VALUES(CONCAT('t1_',FLOOR(1+RAND()*1000)),CONCAT('t11_',FLOOR(1+RAND()*1000)));
SET n=n+1;
IF n=1000000 THEN
LEAVE loopname1;
END IF;
END LOOP loopname1;
loopname2:LOOP
INSERT INTO t4(t4_col) VALUES(CONCAT('t4_',FLOOR(1+RAND()*1000)));
SET m=m+1;
IF m=100000 THEN
LEAVE loopname2;
END IF;
END LOOP loopname2;
COMMIT; -- 数据插入完毕,手动提交
注意,批量插入数据时,需要关闭自动提交。
3. 查看存储过程是否创建:
show PROCEDURE status;
4. 执行存储过程
-- 执行存储过程
CALL my_insert();
执行存储过程时,需要等待3分钟左右。
5. 查询数据是否插入成功
select count(1) from t1;
6. 插入索引
ALTER TABLE t1 ADD INDEX t1_col_index(t1_col);