MySql(准备)—mysql使用存储过程快速插入百万条数据
环境: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=InnoDBDEFAULT CHARSET=utf8;
CREATE TABLE `t4` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`t4_col` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDBDEFAULT 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;
-- 数据插入完毕,手动提交
END;
注意,批量插入数据时,需要关闭自动提交。
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);
7. 查看索引
show index from t1;
历史文章 【MySql(准备)—mysql使用存储过程快速插入百万条数据】mybatis&&数据库优化&&缓存目录
推荐阅读
- 急于表达——往往欲速则不达
- 慢慢的美丽
- 《真与假的困惑》???|《真与假的困惑》??? ——致良知是一种伟大的力量
- 2019-02-13——今天谈梦想()
- 考研英语阅读终极解决方案——阅读理解如何巧拿高分
- Ⅴ爱阅读,亲子互动——打卡第178天
- 低头思故乡——只是因为睡不着
- 取名——兰
- 每日一话(49)——一位清华教授在朋友圈给大学生的9条建议
- 广角叙述|广角叙述 展众生群像——试析鲁迅《示众》的展示艺术