mysql测试数据批量插入
2018-03-25 22:45
274 查看
简介
场景1:测试sql服务器性能时需要单表100万以上数据时场景2:业务测试数据1000个账号每个账号有5个商品
当我们遇到以上场景时,如何快速造数据?
原理
利用select的交叉连接(cross join)。如果不带WHERE条件子句,它将会返回被连接的两个表的笛卡尔积,返回结果的行数等于两个表行数的乘积;
需要预先准备好表和样本数据
造出10万,100万,1000万个用户?
创建一张用户表CREATE TABLE account( id INT(11) NOT NULL AUTO_INCREMENT, name VARCHAR(50) NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (id) );
如何造出待插入造出10万个用户数据
从
account表中看出,我们需要制造出10万条以上不同的
name
name为NAME1,NAME2,NAME3,...,NAME100000
创建一个有10条数据的表
CREATE TABLE sample( id INT(11) NOT NULL AUTO_INCREMENT, value INT(5) NOT NULL DEFAULT 0, PRIMARY KEY (id) ); INSERT INTO sample(value) VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (10);
cross join测试
-- 显示10条数据,列的偏移值为10000 SELECT @rownum := @rownum + 1 FROM sample, (SELECT @rownum := 10000) AS v; -- 显示10×10条数据,列的偏移值为10000 SELECT @rownum := @rownum + 1 FROM sample AS s1, sample AS s2, (SELECT @rownum := 10000) AS v;
插入10万条用户数据,即10×10×10×10×10
INSERT INTO account(name) SELECT CONCAT('NAME' , @rownum := @rownum + 1) FROM sample AS s1, sample AS s2, sample AS s3, sample AS s4, sample AS s5, (SELECT @rownum := 0) AS v
执行结果
0.799 sec是不是很激动?
21:49:37 INSERT INTO account(name) SELECT CONCAT('NAME' , @rownum := @rownum + 1) FROM sample AS s1, sample AS s2, sample AS s3, sample AS s4, sample AS s5, (SELECT @rownum := 0) AS v 100000 row(s) affected Records: 100000 Duplicates: 0 Warnings: 0 0.799 sec
100个账号每个账号有10个商品
创建一个商品表CREATE TABLE item( id INT(11) NOT NULL AUTO_INCREMENT, account_id INT(11) NOT NULL, master_item_id INT(11) NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (id) );
商品表样本数据
INSERT INTO item(account_id, master_item_id) VALUES (1, 1), (1, 2), (1, 3), (1, 4), (1, 5);
1000个账号每个账号有5个商品。新增为(账号为2~1000,账号1为样本数据)
INSERT INTO item(account_id, master_item_id) SELECT a.id, i.master_item_id a871 FROM item AS i, account AS a WHERE i.account_id = 1 AND a.id BETWEEN 2 AND 1000
执行结果
0.125 sec
22:42:54 INSERT INTO item(account_id, master_item_id) SELECT a.id, i.master_item_id FROM item AS i, account AS a WHERE i.account_id = 1 AND a.id BETWEEN 2 AND 1000 4995 row(s) affected Records: 4995 Duplicates: 0 Warnings: 0 0.125 sec
查看原文:https://www.huuinn.com/archives/588
更多技术干货:风匀坊
关注公众号:风匀坊
相关文章推荐
- mysql循环批量插入测试数据
- mysql循环批量插入测试数据
- 基于mysql 批量插入100w测试数据
- mysql 批量插入10000条测试数据测试
- Mysql 如何批量插入百万行测试数据
- mysql 批量插入测试数据
- MySQL像数据库批量插入100w条数据
- mysql存储过程插入固定数量测试数据
- 【学习笔记】mysql 快速批量导入测试数据
- MySQL 使用while语句向数据表中批量插入数据
- mysql 批量插入数据(INNODB)优化
- java(功能篇) java(mysql)数据库 实现数据批量插入
- oracle批量插入测试数据
- 关于批量插入数据之我见(100万级别的数据,mysql)
- Mysql快速插入千万条测试数据
- MySQL使用INSERT插入多条记录, 批量新增数据
- mysql利用存储过程批量插入数据
- 批量插入测试数据
- Mysql游标使用 批量插入或更新数据
- 关于批量插入数据之我见(100万级别的数据,mysql)