⽤sql语句快速⽣成⼤量数据,批量⽣成数据
⽤sql语句快速⽣成⼤量数据,批量⽣成数据
1.⾸先先建两个表
-- 创建⼀个临时内存表
set global log_bin_trust_function_creators=1;
DROP TABLE IF EXISTS`vote_recordss_memory`;
CREATE TABLE`vote_recordss_memory`(
`id`int(10)unsigned NOT NULL AUTO_INCREMENT,
`user_id`varchar(20)NOT NULL DEFAULT'',
`vote_num`int(10)unsigned NOT NULL DEFAULT'0',
`group_id`int(10)unsigned NOT NULL DEFAULT'0',
`status`tinyint(2)unsigned NOT NULL DEFAULT'1',
`create_time`datetime NOT NULL DEFAULT'1971-01-01 01:01:01',
PRIMARY KEY(`id`),
KEY`index_user_id`(`user_id`)USING HASH
)ENGINE=InnoDB AUTO_INCREMENT=1DEFAULT CHARSET=utf8;
-- 创建⼀个普通表,⽤作模拟⼤数据的测试⽤例
DROP TABLE IF EXISTS`vote_records`;
CREATE TABLE`vote_records`(
`id`int(10)unsigned NOT NULL AUTO_INCREMENT,
`user_id`varchar(20)NOT NULL DEFAULT''COMMENT'⽤户Id',
`vote_num`int(10)unsigned NOT NULL DEFAULT'0'COMMENT'投票数',
`group_id`int(10)unsigned NOT NULL DEFAULT'0'COMMENT'⽤户组id 0-未激活⽤户 1-普通⽤户 2-vip⽤户 3-管理员⽤户', `status`tinyint(2)unsigned NOT NULL DEFAULT'1'COMMENT'状态 1-正常 2-已删除',
`create_time`datetime NOT NULL DEFAULT'1971-01-01 01:01:01'COMMENT'创建时间',
PRIMARY KEY(`id`),
KEY`index_user_id`(`user_id`)USING HASH COMMENT'⽤户ID哈希索引'
)ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='投票记录表';
2.创建⼀个可⽣成长度为n的随机字符串的函数
-- 为了数据的随机性和真实性,我们需要创建⼀个可⽣成长度为n的随机字符串的函数。
-- 创建⽣成长度为n的随机字符串的函数
DELIMITER// -- 修改MySQL delimiter:'//'
DROP FUNCTION IF EXISTS`rand_strings`//
SET NAMES utf8 //
CREATE FUNCTION`rand_strings`(n INT)RETURNS VARCHAR(255)CHARSET'utf8'
BEGIN
DECLARE char_str varchar(100)DEFAULT'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; DECLARE return_str varchar(255)DEFAULT'';
DECLARE i INT DEFAULT0;
WHILE i < n DO
SET return_str = concat(return_str, substring(char_str, FLOOR(1+ RAND()*62),1));
SET i = i+1;
END WHILE;
RETURN return_str;
END//
3.创建⼀个插⼊数据的存储过程
-- 为了操作⽅便,我们再创建⼀个插⼊数据的存储过程
-- 创建插⼊数据的存储过程
DROP PROCEDURE IF EXISTS`insert_vote_recordss_memory`//
CREATE PROCEDURE`insert_vote_recordss_memory`(IN n INT)
BEGIN
DECLARE i INT DEFAULT1;
DECLARE vote_num INT DEFAULT0;
DECLARE group_id INT DEFAULT0;
DECLARE status TINYINT DEFAULT1;
WHILE i < n DO
SET vote_num = FLOOR(1+ RAND()*10000);
SET group_id = FLOOR(0+ RAND()*3);
SET status= FLOOR(1+ RAND()*2);
INSERT INTO`vote_recordss_memory`VALUES(NULL, rand_strings(20), vote_num, group_id,status,NOW());
SET i = i +1;
END WHILE;
END//
DELIMITER;-- 改回默认的 MySQL delimiter:';'
4.⽣成数据
-- 开始执⾏存储过程,等待⽣成数据(100W条)
-- 调⽤存储过程⽣成100W条数据
CALL insert_vote_recordss_memory(10000000);
-- 查询内存表已⽣成记录(为了下步测试,⽬前仅⽣成了x条)
SELECT count(*)FROM`vote_recordss_memory`;
-- 把数据从内存表插⼊到普通表中(100w条数据ys就插⼊完了)
INSERT INTO vote_records SELECT*FROM`vote_recordss_memory`;
-- 查询普通表已的⽣成记录
SELECT count(*)FROM`vote_records`;
5.实时监控mysql的⼯具
# 实时监控mysql的⼯具
blog.csdn/u013820054/article/details/54022456
-
--------+-------mysql-status-------+-----threads-----+-----slow-----+---bytes---+---------locks----------
批量更新sql语句time|  QPS  TPS  ins  upd  del| run  con cre cac|sql  tmp Dtmp| recv  send| lockI lockW openT openF
---------+--------------------------+-----------------+--------------+-----------+------------------------
23:15:03|0373*******|3300|010|0K    8K|1012127
23:15:04|0378*******|3300|010|0K    8K|1012127
23:15:05|0373*******|3300|010|0K    8K|1012127
23:15:06|0373*******|3300|010|0K    8K|1012127
23:15:07|0357*******|3300|010|0K    8K|1012127
23:15:08|0358*******|2311|110|0K    8K|1012127
23:15:09|0354*******|2301|010|0K    8K|1012127
23:15:10|0379*******|2301|010|0K    8K|1012127
23:15:11|03861386100|2301|010|0K    8K|1012127
23:15:12|03892389200|2301|010|0K    8K|1012127
23:15:13|03857385700|2301|010|0K    8K|1012127
23:15:14|03900390000|2301|010|0K    8K|1012127
23:15:15|0370*******|2301|010|0K    8K|1012127
23:15:16|03856385600|2301|010|0K    8K|1012127
23:15:17|0316*******|2301|010|0K    8K|1012127
23:15:18|03865386500|2301|010|0K    8K|1012127
23:15:19|138********|3301|010|0K    8K|1012127
23:15:20|028********|2301|010|0K    8K|1012127
23:15:21|029********|2301|010|0K    8K|1012127
23:15:22|03820382000|2301|010|0K    8K|1012127
实践得到⽣成10000条数据时间是23秒左右;⽣成100万条数据在2300秒(38分钟)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。