mysql插入千万条随机数据

2023-05-16

因为想测试sql在千万级数据下的优化,准备在自己的阿里云数据库插入一千万条数据,在网上搜了全是些乱七八糟的,于是就自己动手,同时也希望和大家分享,不足之处还请各位指教。

一、建表

1.创建部分表

create table dept(
id int unsigned primary key auto_increment,
deptno mediumint unsigned not null default 0,
dname varchar(20) not null default"",
loc varchar(13) NOT NULL Default ""
)engine=innodb default charset=utf8;
    为了使插入数据为正数,我是用来unsigned关键字修饰,字段分别为编号,部分编号,部门名称,位置

2.创建员工表

create table emp(
id int unsigned primary key auto_increment,
empno mediumint unsigned not null default 0,
ename varchar(20) not null default"",
job varchar(9) NOT NULL default "",
mgr mediumint unsigned not null default 0,
hiredate date not null,
sal decimal(7,2) not null,
comm decimal(7,2) not null,
deptno mediumint unsigned not null default 0
)engine=innodb default charset=utf8;
    员工表的各字段分别为编号,员工编号,员工姓名,工作,上级,雇佣时间,薪水,奖金,从属部门编号

二、开启二进制函数功能

    我们的数据内容是随机的,所以要使用函数来产生随机的字符串和部门编号。mysql的二进制函数功能默认是关闭的,我们可以通过以下命令查询:
show variables like 'log_bin_trust_function_creators';
+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| log_bin_trust_function_creators | OFF   |
+---------------------------------+-------+

然后通过
set global log_bin_trust_function_creators=1;
将二进制函数功能开启
我们再次查询,结果如下所示

show variables like 'log_bin_trust_function_creators';
+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| log_bin_trust_function_creators | ON    |
+---------------------------------+-------+

这样二进制函数功能就正常开启了,这个功能是本次有效,不过没必要一直开启,接下来我们就可以开始编写我们的函数了。

三、编写随机函数

1.随机产生字符串

delimiter $$
create function rand_string(n int) returns varchar(255)
begin
declare chars_str varchar(100) default 'abcdefghijklmnopqrstuvwxyzABCDEFGHIGKLMNOPQRSTUVWXYZ';
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()*52),1));
set i=i+1;
end while;
return return_str;
end 
$$
    在这里说明下,为了避免;就导致命令提交,我用delimiter将提交的结束符改成$$

2.随机产生部门编号

delimiter $$
create function rand_num() returns int(5)
begin
declare i int default 0;
set i = floor(100+rand()*10);
return i;
end 
$$

四、创建存储过程

1.部门表插入存储过程

delimiter $$
create procedure insert_dept(in start int(10),in max_num int(10))
begin
declare i int default 0;
set autocommit = 0;
repeat 
set i=i+1;
insert into dept (deptno,dname,loc) values((start+i),rand_string(10),rand_string(8));
until i = max_num
end repeat;
commit;
end $$

2.员工表存储过程

delimiter $$
create procedure insert_emp(in start int(10),in max_num int(10))
begin
declare i int default 0;
set autocommit = 0;
repeat
set i=i+1;
insert into emp(empno,ename,job,mgr,hiredate,sal,comm,deptno)
values((start+i),rand_string(6),'salesman',0001,curdate(),2000,400,rand_num());
until i = max_num
end repeat;
commit;
end 
$$

五、调用储存过程

首先将提交符恢复为;
delimiter ;
1.插入10条部门数据
call insert_dept(100,10);
2.插入员工数据
这里我先测试插入50万条数据
call insert_emp (100001,500000);
结果:Query OK, 0 rows affected (34.40 sec),用了34.4秒
再次从员工编号5000001开始插入10000000条数据,
call insert_emp (500001,10000000);
结果:Query OK, 0 rows affected (11 min 25.66 sec)

分析:随机数据的插入还是比较耗费性能的,耗时较长,通过比对两次插入员工表的时间可以看出,第二次插入每条的平均时间还小于第一次,以为两次都只进行了一次事务提交,所以平均下来,第二次插入的每条时间会比第一次少一点。好了,数据插入好之后,我们就可以开始我们的sql调优了

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mysql插入千万条随机数据 的相关文章

  • 如何从shell脚本自动登录MySQL?

    我有一个 MySQL 服务器 其中有一个用户和密码 我想在 shell 脚本中执行一些 SQL 查询而不指定密码 如下所示 config sh MYSQL ROOT root MYSQL PASS password mysql sh sou
  • 我可以使用 HSQLDB 进行 junit 测试克隆 mySQL 数据库吗

    我正在开发一个 spring webflow 项目 我想我可以使用 HSQLDB 而不是 mysql 进行 junit 测试吗 如何将我的 mysql 数据库克隆到 HSQLDB 如果您使用 spring 3 1 或更高版本 您可以使用 s
  • Mysql 时间匹配连接

    我有两个表cpuinfo和jobinfo 我想使用这两种数据创建报告 tabes CREATE TABLE cpuinfo id int 11 NOT NULL AUTO INCREMENT usagetime datetime DEFAU
  • 从按日期时间排序的 MySQL 表中获取用户的最后一个条目

    我有一张看起来像这样的桌子 USERNAME DATA DATETIME Jhon text1 2010 06 01 16 29 43 Mike text2 2010 06 01 16 29 22 Silver text3 2010 05
  • MySql - 复制监控工具[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我有一个主 从 MySql 复制 我正在寻找一个允许我监视复制的工具 查看它没有错误 检查滞后等 我更喜
  • 如果没有找到值,如何让 MySQL 中的 SUM 函数返回“0”?

    假设我在 MySQL 中有一个简单的函数 SELECT SUM Column 1 FROM Table WHERE Column 2 Test 如果没有条目Column 2 包含文本 Test 然后该函数返回NULL 而我希望它返回 0 我
  • 如何优化这个MySQL慢(非常慢)查询?

    我有一个 2 GB 的 mysql 表 包含 500k 行 我在没有负载的系统上运行以下查询 select from mytable where name in n1 n2 n3 n4 bunch more order by salary
  • 在 MySQL 中对整数字段运行带引号的数字(字符串)查询时会发生哪些复杂情况

    在 SQL 中 不应引用整数 因为如果引用 它将是一个字符串 但我很好奇如果我这样做会出现什么问题 并发症 例如 SELECT FROM table WHERE id 1 正确的 vs SELECT FROM table WHERE id
  • 只获取倒数第二条记录 - mysql-query

    我有一个如下表记录 my table id rating description 1 0 0 bed 2 1 0 good 3 0 0 bed 4 1 0 good 5 0 0 bed 6 0 0 bed 7 0 0 bed 现在我通过评级
  • 不带 GROUP BY 的聚合查询

    这个查询似乎在我的旧机器上完美运行 但是 在我的 MySQL 5 7 14 和 PHP 5 6 25 的新机器上 它会抛出错误 致命错误 未捕获异常 PDOException 并带有消息 SQLSTATE 42000 语法错误或访问冲突 1
  • PHP MYSQL文件内容转义问题

    我正在尝试使用 php 将 pdf 文件上传到 mysql 数据库中 除了文件内容之外 一切都很好 无论我如何尝试转义特殊字符 查询总是失败 主要是 未知命令 n 我使用过addslashes mysql real escape strin
  • 每月获取记录,但如果该月没有记录,则为零

    如果我有以下 SQL 表 Tests id type receiveDate 1 Blood 2012 01 18 2 Blood 2012 01 20 3 Blood 2012 01 18 4 Blood 2012 03 01 5 Blo
  • PHP 和 MySQL - 高效处理多个一对多关系

    我正在寻求一些有关使用 MySQL 和 PHP 检索和显示数据的最佳方法的建议 我有 3 个表 所有一对多关系如下 Each SCHEDULE有很多覆盖每个覆盖都有很多地点 我想检索这些数据 以便它可以全部显示在单个 PHP 页面上 例如列
  • 什么时候应该使用 C++ 而不是 SQL?

    我是一名 C 程序员 偶尔使用 MySQL 来处理数据库 但我的 SQL 知识相当有限 但我肯定愿意改变这一点 目前 我正在尝试仅使用 SQL 查询对数据库中的数据进行分析 但我准备放弃了 转而将数据导入到C 中 用C 代码进行分析 我和同
  • MySQL 排序顺序 - 排序规则?

    我在对 MySQL 中的 char 字段进行排序时遇到困难 问题是重音字符与非重音字符混淆 例如 Abc bd Acc 我认为这可能与整理有关 所以我将表格的排序规则更改为utf8 ut8 bin 看完之后这个帖子 https stacko
  • 用 pandas DataFrame 替换 mysql 数据库表中的行

    Python 版本 2 7 6 熊猫版本 0 17 1 MySQLdb 版本 1 2 5 在我的数据库中 PRODUCT 我有一张桌子 XML FEED 表 XML FEED 很大 数百万条记录 我有一个 pandas DataFrame
  • ORDER BY 字段内的 MySQL 子查询。 (没有内连接)

    有很多与此相关的问题 但都具有使用内部联接的相同答案 这 我认为 在这里是不可能的 如果我错了请告诉我 我现在正在做的是调用两个不同的 mysql 查询来获取结果 它工作完美 db gt query SELECT FROM meta WHE
  • posts_search 中的自定义查询

    如何使用此查询作为我的自定义搜索查询 add filter posts search my search is perfect 20 2 function my search is perfect search wp query sWord
  • MYSQL从每个类别中随机选择一条记录

    我有一个数据库Items表看起来像这样 id name category int 有几十万条记录 每个item可以是 7 种不同的之一categories 对应于categories table id category 我想要一个从每个类别
  • 快速将列的副本添加到 MySQL 表

    我需要一种快速的方法来复制表中的 DATETIME 列并为其指定一个新名称 我的表中有一个名为 myDate 的列 名为 myResults 我需要一个查询来在名为 newDate 的表中创建一个新列 该列的数据与 myDate 列完全相同

随机推荐

  • 嵌入式学习(3)-FreeRTOS的创建任务过程

    创建任务过程理解 xTaskCreate xff08 xff09 分析prvInitialiseNewTask xff08 xff09 函数分析vListInitialiseItem xff08 xff09 函数分析prvAddNewTas
  • 浅记XACRO And Gazebo仿真建模

    目录 浅记XACRO And Gazebo仿真建模一 XACRO1 常量定义 2 宏定义 3 文件包含 二 ROS CONTROLros control是什么 xff1f 1 添加 惯性参数和碰撞属性 2 添加 gazebo标签 3 添加
  • OS——进程与线程

    文章目录 进程与线程进程进程的特点进程的模型进程的创建进程的终止进程的状态进程的切换进程的实现进程的合作 线程为什么有线程 xff1f 线程的使用经典的线程模型POSIX线程用户级线程内核级线程混合实现调度程序激活机制进程与线程的比较 进程
  • 720P、1080P、4K之间有什么区别和联系?

    720P 1080P 4K之间有什么区别和联系 xff1f 2018 02 26 11 27视频 视频分辨率 在高清网络摄像机中 xff0c 我们通常叫成百万 两百万像素摄像机 xff0c 经常会听到720P 1080P 4K xff0c
  • 了解python代码的执行顺序和对if __name__ == '__main__'理解

    进度一 xff1a 前几天 xff0c 我学习python时 xff0c 编写简单的代码 xff0c 一般是这样的 xff1a pi py PI 61 3 14 print 34 this is out 34 def main print
  • 跨域 php处理代码

    放到public index php中 header 39 Content Type text html charset 61 utf 8 39 header 39 Access Control Allow Origin 39 代表允许任何
  • 全日制和非全日制;定向和非定向区别联系

    全日制和非全日制 xff08 在职 xff09 是相对的 定向和非定向是相对的 xff0c 委托培养是定向的一种 一般情况下 xff1a 全日制绝大部分都是非定向的 xff0c 非全日制 xff08 在职 xff09 绝大部分都是定向的 定
  • 马云推出的“天猫精灵”到底有多牛? 细思极恐怖

    这个时代的变化有多莫测 xff1f 开网店 改变银行的马云 xff0c 搞起了机器人 xff01 搞搜索 做地图的百度 xff0c 完成了无人驾驶 xff01 马云又打响一枪 马云大动作不断 三个重磅后 xff0c 今天又打了对手一个措手不
  • Ardupilot -- APM源码笔记四(重制)~ 线程机制

    认识Ardupilot线程 在了解过Ardupilot的链接库之后 xff0c 是时候来认识一下Ardupilot是怎么处理线程了 xff0c 对于从arduino继承过来的setup xff08 xff09 loop xff08 xff0
  • 最简单的python 人脸检测

    本篇文章是最基本的人脸检测 xff0c 没有复杂的算法 xff0c 只是简单的运用了这三个库opencv xff0c numpy xff0c pillow 一 开发环境搭建 我们使用Python自带的IDLE进行编程 xff0c 我使用的电
  • FreeRtos 任务优先级和中断优先级

    首先打出这个标题是为了便于搜索 在这里赘述一下 这两者没有关系 只需要明白的是中断优先级高于任务的优先级 在单片机运行的过程中 中断来了就执行中断服务程序 在free rtos中 任务优先级设置的数值越大 任务的优先级越高 Unix任务优先
  • 嵌入式工程师的经典面试题目

    嵌入式工程师的经典面试题目 预处理器 xff08 Preprocessor xff09 1 用预处理指令 define 声明一个常数 xff0c 用以表明1年中有多少秒 xff08 忽略闰年问题 xff09 define SECONDS P
  • rabbitmq版本升级

    目录 一 背景 二 部署新的mq 三 元数据备份和还原 四 消息数据备份和还原 五 注意 一 背景 因原来rabbitmq版本存在漏洞需升级至最新版本 原来是使用软件包部署 xff0c 升级我采用使用docker compose部署 xff
  • __attribute__

    前言 本文介绍 attribute 的使用方法 attribute 介绍 要了解Linux Kernel代码的分段信息 xff0c 需要了解一下gcc的 attribute 的编绎属性 xff0c attribute 主要用于改变所声明或定
  • 卡尔曼滤波(2):一个简单的例子

    为了说明离散性卡尔曼滤波器的用法 xff0c 我将用一个最简单的例子来进行说明 假设我们现在对一个房间内的温度进行测试 xff0c 房间内温度初值为25 c xff0c 每过一个时间周期 xff0c 温度x都将在上一个周期温度的基础上变动
  • 使用websocket连接Activemq,让前端接收MQTT消息

    使用websocket连接Activemq xff0c 让前端接收MQTT消息 Activemq简介准备工作简单示例 Activemq简介 Apache ActiveMQ is the most popular open source mu
  • Unix时间戳,GPS时间戳 ,UTC时间 , 本地时间

    本地时间 xff1a 计算机显示的时间 本地时间 61 UTC 时间 43 时区 xff08 北京时间是东八区 xff0c 也就是 43 8小时 xff09 unix 时间戳 xff1a UTC时间都是从 xff08 1970年01月01日
  • 详解PID控制算法 位置式和增量式区别 附代码详解

    1PID控制算法 什么是PID PID 控制器以各种形式使用超过了 1 世纪 xff0c 广泛应用在机械设备 气动设备 和电子设备 在工业应用中PID及其衍生算法是应用最广泛的算法之一 xff0c 是当之无愧的万能算法 PID 实指 比例
  • 虚拟机中打开Gazebo闪退的解决办法

    问题 xff1a 在vmware虚拟机中打开Gazebo闪退 原因 xff1a 开启了3D加速 xff0c 但分配的显存太小 xff0c 不足1G无法满足Gazebo的最低要求 解决办法如下 xff1a 1 关闭虚拟机 xff0c 在虚拟机
  • mysql插入千万条随机数据

    因为想测试sql在千万级数据下的优化 xff0c 准备在自己的阿里云数据库插入一千万条数据 xff0c 在网上搜了全是些乱七八糟的 xff0c 于是就自己动手 xff0c 同时也希望和大家分享 xff0c 不足之处还请各位指教 一 建表 1