返回顶部
首页 > 资讯 > 数据库 >怎样进行MySQL中的批量初始化数据的对比测试
  • 329
分享到

怎样进行MySQL中的批量初始化数据的对比测试

2024-04-02 19:04:59 329人浏览 泡泡鱼
摘要

本篇文章为大家展示了怎样进行Mysql中的批量初始化数据的对比测试,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。   一直以来对于mysql的存储过程性

本篇文章为大家展示了怎样进行Mysql中的批量初始化数据的对比测试,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

  一直以来对于mysql的存储过程性能还是颇有微词的,说实话够慢的。有时候想做一些对比测试,存储过程初始化几万条数据都得好一会儿,这功夫oracle类似的测试早都做完了,今天就赶个晚班车,把这个没做完的任务完成了。

我大体测试了一下,以100万数据为基准,初始化性能的提升会从近8分钟提升到10多秒钟。

方案1:存储过程导入

我们测试使用的表为users,InnoDB存储引擎,计划初始化数据为100万。

create table users(
userid int(11) unsigned not null,
user_name varchar(64) default null,
primary key(userid)
)engine=innodb default charset=UTF8;使用如下的方式来初始化数据,我们就使用存储过程的方式。

delimiter $$
drop procedure if exists proc_auto_insertdata$$
create procedure proc_auto_insertdata()
begin
    declare
    init_data integer default 1;
    while init_data<=100000 do
    insert into users values(init_data,concat('user'    ,init_data));
    set init_data=init_data+1;
    end while;
end$$
delimiter ;
call proc_auto_insertdata();因为我对这个过程还是信心不足,所以就抓取了十分之一的数据10万条数据,测试的结果是执行了47秒钟左右,按照这个数据量大概需要8分钟左右。
> source create_proc.sql
Query OK, 0 rows affected, 1 warning (0.04 sec)
Query OK, 0 rows affected (0.02 sec)
Query OK, 1 row affected (47.41 sec)    所以这个过程虽然是一步到位,但是性能还是差强人意,我看有 的同学在不同的配置下性能差别很大,有的同学达到了近50分钟。这一点上以自己的测试环境为准,然后能够得到一个梯度的数据就可以了。

   我们来看看第二个方案。

方案2:使用内存表

第二个方案,我们尝试使用内存表来优化,这样一来我们就需要创建一个内存表,比如名叫users_memory。

create table users_memory(
userid int(11) unsigned not null,
user_name varchar(64) default null,
primary key(userid)
)engine=memory default charset=UTF8;然后使用如下的存储过程来导入数据,其实逻辑和第一个存储过程几乎一样,就表名不一样而已,这个里面数据是入到内存表中。

delimiter $$
drop procedure if exists proc_auto_insertdata$$
create procedure proc_auto_insertdata()
begin
    declare
    init_data integer default 1;
    while init_data<=1000000 do
    insert into users_memory values(init_data,concat('user'    ,init_data));
    set init_data=init_data+1;
    end while;
end$$
delimiter ;
call proc_auto_insertdata ;这个过程可能会抛出table is full相关的信息,我们可以适当调整参数tmpdir(修改需要重启),max_heap_table_size(在线修改),然后重试基本就可以了。
> source create_proc_mem.sql
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 1 row affected (4 min 40.23 sec)这个过程用时近5分钟,剩下的内存表数据导入InnoDB表很快了,几秒钟即可搞定。
> insert into users select *from users_memory;
整个过程下来不到5分钟,和第一种方案相比快了很多。

方案3:使用程序/脚本生成数据,批量导入

第三种方案只是抛砖引玉,如果你对PHP熟悉,可以完全用php来写,对哪种语言脚本熟悉,只要实现需求即可。比如我使用shell,也没有使用什么特别的技巧。
shell脚本内容如下:

for i in {1..1000000}
do
echo  $i,user_$i
done > a.lst脚本写得很简单,生成数据的过程大概耗时8秒钟,文件有18M左右。

# time sh a.sh
real    0m8.366s
user    0m6.312s
sys     0m2.039s然后使用load data来导入数据,整个过程花费时间大概在8秒钟左右,所以整个过程的时间在19秒以内。

> load data infile '/U01/testdata/a.lst'  into table users fields terminated by ','  ;
Query OK, 1000000 rows affected (8.05 sec)
Records: 1000000  Deleted: 0  Skipped: 0  Warnings: 0

方案4:内存表,外部文件导入混合

第四种方案是临时想的,也是结合了这几种方案的一些特点,当然不能说它就是最好的。

首先使用脚本生成数据,还是和方案3一样,估算为9秒钟,导入数据到内存表users_memory里面。

> load data infile '/U01/testdata/a.lst'  into table users_memory fields terminated by ','  ;
Query OK, 1000000 rows affected (1.91 sec)
Records: 1000000  Deleted: 0  Skipped: 0  Warnings: 0然后把内存表的数据导入目标表users

> insert into users select *from users_memory;                                   
Query OK, 1000000 rows affected (7.48 sec)
Records: 1000000  Duplicates: 0  Warnings: 0整个过程耗时在18秒,和第三种方案很相似,看起来略微复杂了或者啰嗦了一些。

上述内容就是怎样进行MySQL中的批量初始化数据的对比测试,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注编程网数据库频道。

您可能感兴趣的文档:

--结束END--

本文标题: 怎样进行MySQL中的批量初始化数据的对比测试

本文链接: https://lsjlt.com/news/66224.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 怎样进行MySQL中的批量初始化数据的对比测试
    本篇文章为大家展示了怎样进行MySQL中的批量初始化数据的对比测试,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。   一直以来对于MySQL的存储过程性...
    99+
    2024-04-02
  • 怎么在Pytorch 中对TORCH.NN.INIT 参数进行初始化
    怎么在Pytorch 中对TORCH.NN.INIT 参数进行初始化?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。初始化函数:torch.nn.init#&nb...
    99+
    2023-06-06
  • 利用OGG进行数据库表的初始化
    利用OGG进行数据库表的初始化   前提是已经搭建好了OGG的运行环境和OGG程序的安装部署!!!   若不知道如何安装OGG请查阅博客中相关安装部署文档。            1、停止目标端re1进程          2、配...
    99+
    2020-03-14
    利用OGG进行数据库表的初始化
  • PostgreSQL zedstore在CentOS 7.4进行大批量数据的测试分析
    这篇文章主要介绍“PostgreSQL zedstore在CentOS 7.4进行大批量数据的测试分析”,在日常操作中,相信很多人在PostgreSQL zedstore在CentOS 7.4进行大批量数据...
    99+
    2024-04-02
  • Java对数组进行初始化的方法有哪些
    Java对数组进行初始化的方法有哪些?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一、数组数组中存储元素的类型是统一的,每一个元素在内存中所占用的空间大小是相同的,知道数组的首...
    99+
    2023-06-06
  • 怎样进行MySQL中的事务和锁简单测试
    本篇文章为大家展示了怎样进行MySQL中的事务和锁简单测试,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。 一直以来,对于MySQL中的...
    99+
    2024-04-02
  • python 中defaultdict()对字典进行初始化的用法介绍
    目录用法讲解:1. 不使用defaultdict(): 2. 使用defaultdict(): 用法讲解: 一般情况下,在使用字典时,先定义一个空字典(如dict...
    99+
    2024-04-02
  • JMeter对MySQL数据库进行压力测试的实现步骤
    目录一、安装并配置 JMeter下载配置环境变量导入 MySQL 驱动二、启动 JMeter三、开始进行压力测试配置观察结果总结一、安装并配置 JMeter 下载 官网下载,下载二进...
    99+
    2024-04-02
  • 怎么对Java8中的函数式接口进行测试
    怎么对Java8中的函数式接口进行测试?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1. 函数式接口的理解根据重构的思想,需要把容易变化的模块进行抽象并封装起来,从这个点来...
    99+
    2023-05-31
    java8 函数式接口 ava
  • MySQL中怎么对数据表进行故障检测
    MySQL中怎么对数据表进行故障检测,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。表的故障检测和修正的一般过程如下:◆ 检查出错的表。如果该表...
    99+
    2024-04-02
  • MySQL实现批量插入测试数据的方式总结
    目录前言表使用函数生成设置允许创建函数创建存储过程执行存储过程总结使用 Navicat自带的数据生成前言 在开发过程中我们不管是用来测试性能还是在生产环境中页面展示好看一点, 又或者...
    99+
    2023-05-20
    MySQL批量插入测试数据方式 MySQL批量插入数据 MySQL插入数据
  • SQLServer数据库中怎么对文件进行批量重命名
    SQLServer数据库中怎么对文件进行批量重命名,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。  SQLServer数据库如何对文件进行...
    99+
    2024-04-02
  • 量比较多的数据库该怎样优化
    这期内容当中小编将会给大家带来有关量比较多的数据库该怎样优化,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。查询的优化  保证在实现功能的基础上,尽量减少对数据库的访问次数...
    99+
    2024-04-02
  • MySQL中怎么利用循环进行批量数据校验
    在MySQL中,可以通过使用存储过程结合循环来进行批量数据校验。下面是一个示例: 假设有一个表users,其中有一个字段age表示用...
    99+
    2024-04-30
    MySQL
  • MySQL中怎么使用循环进行批量数据归档
    在MySQL中,可以使用存储过程来实现循环进行批量数据归档。下面是一个示例存储过程,用于将数据从一个表归档到另一个表: DELIMI...
    99+
    2024-04-30
    MySQL
  • MySQL查询语句中的IN和Exists怎样进行对比分析
    这篇文章给大家介绍MySQL查询语句中的IN和Exists怎样进行对比分析,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。背景介绍最近在写SQL语句时,对选择IN 还是Exists 犹豫...
    99+
    2024-04-02
  • 怎样进行mysql数据库的分析
    怎样进行mysql数据库的分析,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、数据库是什么?数据库是管理数据的一类软件。对数据的管理体现在两个方面,第一是描述数据,即一条...
    99+
    2023-06-22
  • 深入探索Golang中的数据类型与变量初始化
    深入探索Golang中的数据类型与变量初始化在Go语言中,数据类型和变量的初始化是我们常常需要面对的问题。正确的数据类型和变量的初始化可以确保程序的健壮性和正确性。在本文中,我们将深入探索Golang中的数据类型和变量初始化的相关知识,并给...
    99+
    2023-12-23
    数据类型 Golang 变量初始化
  • Layui中的table组件如何进行初始化加载数据、数据刷新表格、传参数
    这篇文章给大家分享的是有关Layui中的table组件如何进行初始化加载数据、数据刷新表格、传参数的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。出现的问题:1、使用 Layui ...
    99+
    2024-04-02
  • C++中怎样对程序中的浮点数据进行“整齐”地格式化
    本篇内容介绍了“C++中怎样对程序中的浮点数据进行“整齐”地格式化”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!下面进行详细说明在C++中怎...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作