mysql存储中使用while批量插入数据(批量提交和单个提交的区别)

Tia ·
更新时间:2024-11-10
· 1543 次阅读

目录

批量提交

完整写法

单个提交

完整写法

结论

批量提交

while 语句写法:

    while '条件' do             循环体语句;     end while; 完整写法 drop procedure if exists test_insert; delimiter $$ create procedure test_insert(n int)     begin     declare v int default 0;     set AUTOCOMMIT = 0;     while v < n         do                 insert into test(second_key, text, field_4,status, create_date)                 values ((v*10),                 concat('t',v),                 substring(md5(rand()), 1, 10),                 'good',                 adddate('1970-01-01', rand(v) * 10000));         set v = v + 1;      end while;       set AUTOCOMMIT = 1; end$$ delimiter ;

查看、删除存储过程:

mysql> show procedure status like 'test_insert'; mysql> show create procedure test_insert\G; mysql> drop procedure if exists test_insert;

创建表

CREATE TABLE test ( id INT NOT NULL AUTO_INCREMENT, second_key INT, text VARCHAR(20), field_4 VARCHAR(20), status VARCHAR(10), create_date date, PRIMARY KEY (id), KEY idx_second_key (second_key) ) Engine=InnoDB CHARSET=utf8;

插入100万条数据

mysql> call test_insert(1000000); Query OK, 0 rows affected (31.86 sec) 单个提交 完整写法 drop procedure if exists test_insert; delimiter $$ create procedure test_insert(n int)     begin     declare v int default 0;     while v < n         do                 insert into test(second_key, text, field_4,status, create_date)                 values ((v*10),                 concat('t',v),                 substring(md5(rand()), 1, 10),                 'good',                 adddate('1970-01-01', rand(v) * 10000));         set v = v + 1;      end while; end$$ delimiter ;

插入1万条数据

mysql> call test_insert(10000); Query OK, 1 row affected (1 min 8.52 sec)

打开另一个窗口查看

mysql> select count(*) from test.test; +----------+ | count(*) | +----------+ |     1428 | +----------+ 1 row in set (0.00 sec) mysql> select count(*) from test.test; +----------+ | count(*) | +----------+ |     1598 | +----------+ 1 row in set (0.00 sec) mysql> select count(*) from test.test; +----------+ | count(*) | +----------+ |     1721 | +----------+ 1 row in set (0.00 sec) mysql> select count(*) from test.test; +----------+ | count(*) | +----------+ |     1983 | +----------+ 1 row in set (0.00 sec) 结论

批量提交100万条数据用了30秒,单个提交1万条数据用了1分钟,对比发现,批量提交的效率远大于单个提交的效率

以上为个人经验,希望能给大家一个参考,也希望大家多多支持软件开发网。 



WHILE 数据 Mysql

需要 登录 后方可回复, 如果你还没有账号请 注册新账号