MySQL 数据蠕虫生成百万测试数据
前言
有时,为了对某个sql语句或者功能进行效率测试时,我们需要海量的测试数据,来完成这个功能,可以使用数据蠕虫的方法来模拟出海量数据
将查询出来的数据不断的新增插入到指定的数据表中。通常情况,mysql蠕虫复制时用来测试表压力。
介绍
数据蠕虫,学名(蠕虫复制):
顾名思义自己复制自己,并且数量成倍也就是以指数的形式增加。mysql蠕虫复制的重点就在于复制。
蠕虫复制的意义:
-
从已有的数据表中拷贝数据到新的数据表;
-
可以迅速的让表中的数据膨胀到一定的数量级,多用于测试表的压力及效率。
语法
insert into + 数据表名 +字段列表/* + from 数据表名;
//例
insert into users select null,username,password,nickname,avatar,created_at,updated_at,deleted_at from users;
测试
以下是测试表结构:
CREATE TABLE `users` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`username` varchar(120) COLLATE utf8mb4_unicode_ci NOT NULL,
`password` varchar(80) COLLATE utf8mb4_unicode_ci NOT NULL,
`nickname` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
`avatar` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
`deleted_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
先查询下已有表中的信息字段
执行蠕虫语句
再次执行
查看数据条数
数据以2,4,8,16,32...的规律来增长的,也就是我们熟悉的以指数形式增加的。那么一直操作下去,就能在短时间内使得表中数据膨胀到一定数量级,从而达到测试出表压力的目的。
模拟真实数据
数据量是满足了,但是数据真实性还有待提高。实际不会所有人的姓名、密码、昵称、头像都是一样的,因此需要对姓名、密码、昵称、头像字段进行修改。
修改姓名|昵称:
这里我们可以把姓名和昵称设置为 test_id|test_name 的格式,保证数据唯一性。test_id 的格式可以利用MySQL里的函 CONCAT 进行字符串拼接:
修改密码:
密码利用随机数和md5内置加密函数实现
修改更新时间:
使用MySQL内置时间函数实现
update users set username = concat('test',id),nickname = concat('testName',id),password=md5(rand()*100),updated_at=now();
最终的数据如下,还算是比较真实的数据。
构造百万级数据就可以使用了。
转载自:https://juejin.cn/post/7046558889646489607