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

 更新时间:2022年08月17日 11:09:05   作者:刘大大__  
这篇文章主要介绍了mysql存储中使用while批量插入数据(批量提交和单个提交的性能差异),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

批量提交

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分钟,对比发现,批量提交的效率远大于单个提交的效率

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。 

相关文章

  • 几个常见的MySQL的可优化点归纳总结

    几个常见的MySQL的可优化点归纳总结

    这篇文章主要介绍了几个常见的MySQL的可优化点归纳总结,包括在编程时处理索引、分页以及数据类型时可用到的地方,需要的朋友可以参考下
    2015-05-05
  • MySQL Community Server压缩包安装配置方法

    MySQL Community Server压缩包安装配置方法

    这篇文章主要为大家详细介绍了MySQL Community Server压缩包安装配置方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • My Sql 1067错误与编码问题的解决方案

    My Sql 1067错误与编码问题的解决方案

    My Sql 大部分都是用绿色版(解压版) 然后注册服务简单方便,但是配置文件也很让人纠结,下面小编给大家带来了My Sql 1067错误与编码问题的解决方案,感兴趣的朋友参考下吧
    2016-11-11
  • mysql查询锁表的实现方法

    mysql查询锁表的实现方法

    本文主要介绍了mysql查询锁表的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-09-09
  • 解决Navicat Premium 连接 MySQL 8.0 报错

    解决Navicat Premium 连接 MySQL 8.0 报错"1251"的问题分析

    这篇文章主要介绍了解决Navicat Premium 连接 MySQL 8.0 报错"1251"的问题分析,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • MySQL使用show effective grants查看权限官方解读

    MySQL使用show effective grants查看权限官方解读

    这篇文章主要为大家介绍了MySQL使用show effective grants查看权限,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • Mysql从5.6.14安全升级至mysql5.6.25的方法

    Mysql从5.6.14安全升级至mysql5.6.25的方法

    这篇文章主要介绍了Mysql从5.6.14安全升级至mysql5.6.25的方法,本教程讲的非常详细,具有参考借鉴价值,需要的朋友参考下吧
    2016-08-08
  • 系统高吞吐量下的数据库重复写入问题分析解决

    系统高吞吐量下的数据库重复写入问题分析解决

    这篇文章主要介绍了系统高吞吐量下的数据库重复写入问题分析解决,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-04-04
  • 教您修复mysql数据库的方法

    教您修复mysql数据库的方法

    你可能在使用MySQL过程中,各种意外导致数据库表的损坏,而且这些数据往往是最新的数据,通常不可能在备份数据中找到。本章将继上篇文章中检查出表的问题后,告诉你如何修复表
    2014-05-05
  • 浅谈MySQL数据库表锁了怎么解锁

    浅谈MySQL数据库表锁了怎么解锁

    在使用 MySQL 数据库时,有时候会发生某个表被锁住的情况,这可能会导致其他用户无法对该表进行读写操作,影响系统的正常运行,本文主要介绍了浅谈MySQL数据库表锁了怎么解锁,感兴趣的可以了解一下
    2023-10-10

最新评论