美文网首页
MySQL随机生成百万级数据

MySQL随机生成百万级数据

作者: 杀士比亚 | 来源:发表于2019-10-07 13:25 被阅读0次

MySQL插入百万级数据

参考

MySQL 轻松创建千万级测试数据

最近在一个博客看到了一篇文章,主要是讲述如何使用MySQL存储过程和函数创建百万级别测试数据,作者原文标题是千万级测试数据,但是我只测试了10W级别的数据。

测试环境

CPU i5@2.30GHz
内存 15GB
MySQL版本—8.0.17
MySQLWORKBENCH

1.创建数据表

创建两张表,一张为内存表,一张为正式表,内存表主要放存储过程生成的随机数据,正式表再用查询插入从内存表中获取数据。

CREATE TABLE `vote_record` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` varchar(20) NOT NULL,
  `vote_id` int(11) NOT NULL,
  `group_id` int(11) NOT NULL,
  `create_time` datetime NOT NULL,
  PRIMARY KEY (`id`),
  KEY `index_user_id` (`user_id`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;

1.1创建内存表

CREATE TABLE `vote_record_memory` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` varchar(20) NOT NULL,
  `vote_id` int(11) NOT NULL,
  `group_id` int(11) NOT NULL,
  `create_time` datetime NOT NULL,
  PRIMARY KEY (`id`),
  KEY `index_user_id` (`user_id`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;

2.使用存储过程

随机生成字符串,传入参数是字符串长度

CREATE DEFINER=`root`@`%` FUNCTION `rand_string`(n INT) RETURNS varchar(255) CHARSET utf8mb4
    DETERMINISTIC
BEGIN
    DECLARE chars_str varchar(100) DEFAULT 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
    DECLARE return_str varchar(255) DEFAULT '' ;
    DECLARE i INT DEFAULT 0;
    WHILE i < n DO
        SET return_str = concat(return_str, substring(chars_str, FLOOR(1 + RAND() * 62), 1));
        SET i = i + 1;
    END WHILE;
    RETURN return_str;
END

2.1创建存储过程

传入参数是创建的数据量

CREATE DEFINER=`root`@`%` PROCEDURE `add_vote_memory`(IN n int)
BEGIN
    DECLARE i INT DEFAULT 1;
    WHILE (i <= n) DO
        INSERT INTO vote_record_memory (user_id, vote_id, group_id, create_time) VALUES (rand_string(20), FLOOR(RAND() * 1000), FLOOR(RAND() * 100), NOW());
        SET i = i + 1;
    END WHILE;
END

MySQL的存储过程要注意两个点:

  • 1、在执行上面的语句之前要先执行DELIMITER $$,这条命令的作用是可以将分号;暂时注销原先功能,要不然存储过程中间的分号就会报错。
  • 2、存储过程的名称所用的不是单引号而是左边键盘数字1左边的反引号。

    单引号 '
    反引号 `
    双引号 "

2.2调用存储过程

CALL add_vote_memory(1000000)

这里第一次使用MySQL WORKBENCH执行的时候大概在30秒左右报错,这是 WORKBENCH的一个设置,大概就是最长的连接时间,修改方式

edit>>Preferences>>SQL Editor>>DBMS connection read timeout interval(in seconds):

大概执行时间30W数据要15分钟以上,至于100W数据就已经没耐心等下去了。
这里还有一个容易报错的地方就是单表的最大容量,mysql默认每张表占据的存储空间有一个最大值,可以修改这个最大值,具体细节可以查看配置文件.

调用存储过程,并且参数为10W的结果:


cmd中测试插入10W数据.png

100W就是这个时间乘以10倍,大概40分钟左右

总结:
看别人的文章学习技巧的时候还是要自己动手操作一遍才能知道有哪些坑,因为每个人的知识边界都不一样,有些你认为是常识的东西说不定别人就不知道,反之亦然,所以学习编程重点就是多写代码多做测试。

相关文章

  • MySQL随机生成百万级数据

    MySQL插入百万级数据 参考 MySQL 轻松创建千万级测试数据 最近在一个博客看到了一篇文章,主要是讲述如何使...

  • 性能优化系列文章目录

    1.概览 性能优化概览 2.MySQL数据库优化 如何做好MySQL数据库优化-第一部分 快速生成百万级测试数据 ...

  • C++生成随机数据方法

    生成随机int数组方法(数据未知) 生成随机Int序列(给定数据) 生成随机序列(给定数据)--模板函数

  • 用Mysql分析机票、航班数据

    用MySQL分析机票航班数据 数据来自EXCEL随机生成的短数据 1.航班/机票订单数据 10013条订...

  • Jmeter——Dummy Sampler

    一、Dummy Sampler 二、随机函数生成当前时间 生成当前时间 三、随机函数生成数据 _Random随机函...

  • 2018-08-09Jmeter——Dummy Sampler

    一、Dummy Sampler 二、随机函数生成当前时间 生成当前时间 三、随机函数生成数据 Random

  • MYSQL分页limit速度太慢优化方法

    MySQL 百万级分页优化(Mysql千万级快速分页)(转) MYSQL分页limit速度太慢优化方法 MYSQL...

  • c++学习记录14(GeekBand)

    mysql处理海量数据时的一些优化查询速度方法 作为最常用的数据库,当mysql表的数据量达到百万级时,普通SQL...

  • 数据可视化--数据看板

    声明:本文为原创,仅供学习交流,转载请标明出处,数据皆是随机生成,仅作为示列使用。 数据概述: 我们随机生成的数据...

  • mysql(四):mysql集群环境搭建

    说明 集群 MySQL集群的设计实现了毫秒级响应性能,每秒支持数百万次操作。MySQL集群还支持内存和磁盘数据存储...

网友评论

      本文标题:MySQL随机生成百万级数据

      本文链接:https://www.haomeiwen.com/subject/xrkmpctx.html