存储过程 + insert into values (),(),();插入海量数据

发现该文存储过程中使用 insert into values 插入数据,但是每次只插入一条数据,因此,决定一次插入十条观察效率

参考文章 :重新学习MySQL数据库12:从实践sql语句优化开始 -> 自己写的海量数据sql优化实践

测试环境: Mysql 5.7, Navicat 12.0.18
插入10万条数据结果
存储过程 + insert into values (),(),();插入海量数据_第1张图片
其中 set global general_log = on 用于开启日志,off 用于关闭日志。 general_log 将所有到达MySQL Server的SQL语句记录下来。

代码如下

-- 创建插入数据的存储过程
DROP PROCEDURE IF EXISTS `add_vote_record_memory`;
DELIMITER //
CREATE PROCEDURE `add_vote_record_memory`(IN n INT)
BEGIN
    DECLARE i INT DEFAULT 1;
    WHILE i < n DO
        INSERT INTO `vote_record_memory` 
						VALUES
							(NULL, rand_string(20), FLOOR(1 + RAND() * 10000), FLOOR(0 + RAND()*3), FLOOR(1 + RAND()*2), NOW()),
							(NULL, rand_string(20), FLOOR(1 + RAND() * 10000), FLOOR(0 + RAND()*3), FLOOR(1 + RAND()*2), NOW()),
							(NULL, rand_string(20), FLOOR(1 + RAND() * 10000), FLOOR(0 + RAND()*3), FLOOR(1 + RAND()*2), NOW()),
							(NULL, rand_string(20), FLOOR(1 + RAND() * 10000), FLOOR(0 + RAND()*3), FLOOR(1 + RAND()*2), NOW()),
							(NULL, rand_string(20), FLOOR(1 + RAND() * 10000), FLOOR(0 + RAND()*3), FLOOR(1 + RAND()*2), NOW()),
							(NULL, rand_string(20), FLOOR(1 + RAND() * 10000), FLOOR(0 + RAND()*3), FLOOR(1 + RAND()*2), NOW()),
							(NULL, rand_string(20), FLOOR(1 + RAND() * 10000), FLOOR(0 + RAND()*3), FLOOR(1 + RAND()*2), NOW()),
							(NULL, rand_string(20), FLOOR(1 + RAND() * 10000), FLOOR(0 + RAND()*3), FLOOR(1 + RAND()*2), NOW()),
							(NULL, rand_string(20), FLOOR(1 + RAND() * 10000), FLOOR(0 + RAND()*3), FLOOR(1 + RAND()*2), NOW()),
							(NULL, rand_string(20), FLOOR(1 + RAND() * 10000), FLOOR(0 + RAND()*3), FLOOR(1 + RAND()*2), NOW());							
        SET i = i + 10;
    END WHILE;
END //
DELIMITER ;  -- 改回默认的 MySQL delimiter:';'

站在巨人的肩膀上,才能尿得更远。。。

你可能感兴趣的:(mysql)