首页 > 数据库 >Mysql、(五) 千万级数据批量插入

Mysql、(五) 千万级数据批量插入

时间:2023-02-24 21:23:02浏览次数:35  
标签:rand varchar 批量 default 千万级 int num Mysql null

@

目录


一、开启函数创建错误日志

在这里插入图片描述

  • 查看是否开启: show variables like '%log_bin_trust_function_creators';

  • 开启:set global log_bin_trust_function_creators=1;

  • 永久开启:

    • windows my.ini [mysqld]加上:log_bin_trust_function_creators=1
    • linux下 /etc/my.cnf 下my.cnf

二、创建sql脚本

建表语句:

create table if not exists `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=gbk;


create table if not exists `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,
   `hiredata` 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=gbk;

1) 创建函数

# 生成长度为n的随机字符串

delimiter $$    # 作用是定义换行符为$$,因为函数编写中需要换行用到 ; 
create function rand_string(n int) returns varchar(255)
begin
  # 声明变量
  declare chars_str varchar(100) default 'abcdefghijklmnopqrstuvwxyz';
  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()*25),1));
     set i = i+1;
  end while;
  return return_str;
end $$
# 随机生成一个整形数字

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

2) 创建存储过程

# 往emp 表中插入 id从start开始的 max_num 条数据

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;
      # 存储过程中调用了之前定义的函数 rand_num()、rand_string(int n)
      insert into emp(empno,ename,job,mgr,hiredate,sal,comm,deptno) values ((start+i),rand_string(6),'saleman',0001,curdate(),2000,400,rand_num());
   until i<max_num
   end repeat;
   commit;   # 提交事务
 end $$
# 往dept表中插入....

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(10));
    until i=max_num
    end repeat;
    commit;
end $$

3) 调用存储过程

插入40w条数据:
call insert_emp(10001,40000);
在这里插入图片描述

此时使用40W条数据测试索引查询的优势就很明确了:

  • 建立索引前,全表查询:
    在这里插入图片描述
  • 建立索引后:
    在这里插入图片描述

标签:rand,varchar,批量,default,千万级,int,num,Mysql,null
From: https://www.cnblogs.com/istitches/p/17153173.html

相关文章

  • Mysql、(二) 索引
    @目录一、索引概述二、索引的优势劣势三、索引结构BTREE索引B+TREE索引1.结构介绍2.Mysql中的B+树四、索引分类4.1InnoDB_聚簇索引聚簇索引的优点:聚簇索引的缺点:4.2In......
  • MySQL备份---还原
    1.全量备份(数据+结构)#mysqldump-uroot-p123456-A>备份文件路径2.指定库备份(数据+结构)#mysqldump-uroot-p123456库名>备份文件路径3.多个库备份(数据+结构)#mysqld......
  • mysql主从自动搭建
    1.主服务器​​master.sh​​#!/bin/bash#====================================================#Author:Mr.Song#CreateDate:2019-02-21#Description:autoconfig......
  • mysql半同步
    什么是半同步复制所谓的半同步复制就是master主服务器每commit一个事务(简单来说就是做一个改变数据的操作),要确保slave从服务器接收完主服务器发送的binlog日志文件并写入......
  • MySQL数据库架构&SQL注入漏洞
    1.查找zblog数据库中有哪些表查找目标表(zbp_member)中的的字段查找目标表中的目标数据(管理员的用户名密码)4.使用UNION语句替换掉原有查询结果,显示zblog数据库中的所有表。网......
  • 【项目实战】mybatis +vue.js 前后端交互批量删除
    单个删除功能已经实现了,批量删除弄了很久也没弄好,来试一下。弄了很久终于把批量删除实现了!结果:点击确认后,将看见表中已经少了两条数据。实现的关键是:1.正确传递数据......
  • Mysql记录
    远程操作mysql远程连接:mysql-hhost-uusername-p'password'mysql远程dump并导出:mysqldump-hhost-uusername-p'password'库名>dump.sqlmysql直接执行......
  • ansible批量采集、批量互信、批量复制、分发文件
    一、先说一下用ansible批量采集机器信息的实现办法:1、先把要采集的机器信息的IP添加到主节点机器的/etc/ansible/hosts里面;2、在/etc/ansible/hosts里面添加想要登陆的密......
  • MySQL数据库学习笔记1
    MySQL数据库学习笔记1MySQL服务器启动与连接#启动mysql.serverstart#连接mysql-uroot-pMySQL数据库的数据模型客户端访问MySQL数据库,是与数据库管理系统交......
  • python基于word模板批量生成word文件
    1、需要用到docxtpl库,用于操作word模板安装:pipinsatlldocxtpl处理之前的word模板 处理后的word 下面直接上代码揭开它的神秘面纱:第一步,读取excel中的内容imp......