在上一次朋友问我如何快速构造一亿条记录的表后,我理出了实行的办法,见:https://blog.csdn.net/csdnhsh/article/details/95759379,但是因为录入一亿表需要2个小时,所以还是感觉速度慢了些,那有没有啥办法能加快这一步骤呢?

 

1、建一张通用的用户表

建用户表没有啥变化,还是和上次一样。

USE test;

CREATE TABLE `UC_USER` (

`ID` BIGINT (20),

`USER_NAME` VARCHAR (400),

`USER_PWD` VARCHAR (800),

`BIRTHDAY` DATETIME ,

`NAME` VARCHAR (800),

`USER_ICON` VARCHAR (2000),

`SEX` CHAR (4),

`NICKNAME` VARCHAR (800),

`STAT` VARCHAR (40),

`USER_MALL` BIGINT (20),

`LAST_LOGIN_DATE` DATETIME ,

`LAST_LOGIN_IP` VARCHAR (400),

`SRC_OPEN_USER_ID` BIGINT (20),

`EMAIL` VARCHAR (800),

`MOBILE` VARCHAR (200),

`IS_DEL` CHAR (4),

`IS_EMAIL_CONFIRMED` VARCHAR (4),

`IS_PHONE_CONFIRMED` VARCHAR (4),

`CREATER` BIGINT (20),

`CREATE_DATE` DATETIME ,

`UPDATE_DATE` DATETIME ,

`PWD_INTENSITY` VARCHAR (4),

`MOBILE_TGC` VARCHAR (256),

`MAC` VARCHAR (256),

`SOURCE` VARCHAR (4),

`ACTIVATE` VARCHAR (4),

`ACTIVATE_TYPE` VARCHAR (4),

`IS_LIFE` VARCHAR (4)

) ENGINE=INNODB;

2、优化录数据的存储过程

这里有变化了,设置了set autocommit=0;了,这样不用每次insert就commit一次,实现了30W后insert然后进行commit,这样就是批量提交,提高了数据写效率。

而且在执行commit的时候,为了验证是否批量提交,就做了有小验证,而且验证的信息写入到临时日志表里面uc_log表去,uc_log表结构如下:

CREATE TABLE `uc_log` (
  `msg` varchar(1000) DEFAULT NULL comment ‘提交信息记录’,
  `id` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4

存储过程内容:

DELIMITER $$

USE `test`$$

DROP PROCEDURE IF EXISTS `pro_test_data_1`$$

CREATE DEFINER=`dev_user`@`%` PROCEDURE `pro_test_data_1`( pos_begin INT,pos_end INT)

BEGIN

DECLARE i INT;

SET i=pos_begin;

SET AUTOCOMMIT=0;

WHILE  i>=pos_begin && i<= pos_end DO

INSERT INTO test.`UC_USER_1` (`ID`, `USER_NAME`, `USER_PWD`, `BIRTHDAY`, `NAME`, `USER_ICON`, `SEX`, `NICKNAME`, `STAT`, `USER_MALL`, `LAST_LOGIN_DATE`, `LAST_LOGIN_IP`, `SRC_OPEN_USER_ID`, `EMAIL`, `MOBILE`, `IS_DEL`, `IS_EMAIL_CONFIRMED`, `IS_PHONE_CONFIRMED`, `CREATER`, `CREATE_DATE`, `UPDATE_DATE`, `PWD_INTENSITY`, `MOBILE_TGC`, `MAC`, `SOURCE`, `ACTIVATE`, `ACTIVATE_TYPE`, `IS_LIFE`) VALUES(i,'admin','1ba613b3676a4a06d6204b407856f374',NOW(),'超管','group1/M00/03/BC/wKi0d1QkFaWAHhEwAAAoJ58qOcg271.jpg','1','admin2014','01','1',NOW(),'192.168.121.103',NULL,'','10099990001','0','1','0',NULL,NULL,NULL,'1','E5F10CAA4EBB44C4B23726CBBD3AC413','1-3','0','2','2','1');

SET i=i + 1;  # 接下来判断30W一批次就commit一回。

IF MOD(i,300000)<=0 THEN

INSERT INTO test.uc_log(id,msg)VALUES(i,'begin to commmit a group insert sql data.');

COMMIT;

END IF;

END WHILE;

END$$

DELIMITER ;

Blog来源地址: http://blog.csdn.net/mchdba/article/details/52987852,博主mchdba(黄杉),谢绝转载

3、录入数据忽略binlog

开始启用存储过程录入一亿条数据进表,命令call test.pro_test_data(0,100000000);,这里时间会比较长一些,毕竟是一亿条记录。

# 录入数据的时候,不写入binlog,加快数据录入

mysql> set sql_log_bin=0;

Query OK, 0 rows affected (0.00 sec)

mysql>

mysql> call test.pro_test_data_1(0,100000000);

Query OK, 1 row affected (1 hour 37 min34.57 sec)   # 看到用时是1 hours 37 min 34.57 sec,1个半小时左右。

mysql>

mysql> select count(1) from test.`UC_USER_1`;

+-----------+

| count(1)  |

+-----------+

| 100000001 |

+-----------+

1 row in set (3 min 0.14 sec)

mysql>

MySQL 快速构造一亿条记录的表相关推荐

  1. Oracle 12c 能否在2小时内完成一张14亿条记录的表结构字段类型变更

    原文链接:https://www.modb.pro/db/22757 概述 前面分享过Oracle大表在线修改的脚本(在线重定义),经过几轮的测试发现,都存在些缺陷,效率始终不是很满意.这次把索引和统 ...

  2. mysql 快速插入(insert)多条记录

    方法1: INSERT INTO table(col_1, col_2,col_3) VALUES('1','11','111'); INSERT INTO table(col_1, col_2,co ...

  3. mysql十亿_Mysql:表中有数十亿条记录

    我需要在Mysql表中保存约78亿条记录.该表既读写又密集.我必须每小时至少保留20亿记录的插入率.而在桌子上搜索不应超过10秒钟. 我们有一个UI,用户可以根据不同的colums属性进行搜索. 大多 ...

  4. 14亿条记录,12c 做不到2小时内变更表结构字段类型?

    导读:本文详细讲述Oracle 12c 在2小时内完成一张14亿条记录的表结构字段类型变更的过程,希望可以帮到工作中的大家,如有任何疑问,欢迎在本文的评论区交流讨论. 概述 Oracle大表在线修改的 ...

  5. mysql 万亿数据_sql-server – 哪个数据库可以处理数十亿/数万亿条记录的存储?...

    我们正在研究开发一种捕获和分析netflow数据的工具,我们收集了大量的数据.每天我们捕获大约14亿个流记录,这些记录在json格式中看起来像这样: { "tcp_flags": ...

  6. mysql快速导入5000万条数据过程记录(LOAD DATA INFILE方式)

    mysql快速导入5000万条数据过程记录(LOAD DATA INFILE方式) 首先将要导入的数据文件top5000W.txt放入到数据库数据目录/var/local/mysql/data/${d ...

  7. mysql一张表100亿条数据_一个表有100亿条记录,如何优化

    我们的数据库还在设计阶段.我们预计数据量将会很大,一年的时间里,一张表,就会产生100亿条数据,表结构,如下id,userid,createddate,等等正常情况下,100亿条记录如果都存在一个表里 ...

  8. 将PostgreSQL数据库扩展到每个月12亿条记录的经验教训

    这不是我第一次使用大型数据集.我为最大的英国公共Wi-Fi供应商设计的认证和产品管理数据库也有巨大的容量.我们每天跟踪数百万设备的身份认证.然而,该项目有资金,允许我们选择任何硬件.任何支持服务以及聘 ...

  9. MySQL使用INSERT插入多条记录

    2019独角兽企业重金招聘Python工程师标准>>> MySQL使用INSERT插入多条记录,应该如何操作呢?下面就为您详细介绍MySQL使用INSERT插入多条记录的实现方法,供 ...

最新文章

  1. 论坛第20000名幸运儿是谁?
  2. Gridview 隐藏列
  3. 10.29 工作笔记 ndk编译C++,提示找不到头文件(ndk-build error: string: No such file or directory)...
  4. matlab穆尔,基于matlab(矩阵实验室)的倒立摆控制系统仿真(34页)-原创力文档
  5. leetcode刷题:循环队列
  6. 如何判断数组所有数都不等于一个数_工程师编程,C语言学习,关于数组方面的一些总结...
  7. linux xargs命令选项,使用xargs命令在Linux中执行多个操作 | MOS86
  8. 使用ColorUI组件
  9. 第三篇: DDcGAN-用于多分辨率图像融合的双判别器生成对抗网络
  10. 计算机视觉 图像算法工程师 面试问题总结
  11. 图像处理时为什么灰度化
  12. 大学计算机应用教程马秀麟,大学计算机基础电子教案.docx
  13. 《数据清洗》第六章课后操作
  14. java.lang.SecurityException: com.example.rxtest was not granted this permission: android.permission
  15. 平分七筐鱼c语言y,平分七筐鱼 - 寂寞暴走伤的个人空间 - OSCHINA - 中文开源技术交流社区...
  16. 关于Spark的部署yarn模式
  17. YTU 3837问题 E: 一道老卢题
  18. 将一个八位的二进制数转换为十进制数
  19. 悬浮View,可拖动,放手后自动吸附到屏幕边上。
  20. jdk api 1.6中文版打不开

热门文章

  1. DirectX11 With Windows SDK--11 混合状态
  2. FFmpeg用于flv/QSV格式转换(速度接近拷贝)
  3. babel es6转es5
  4. Modbus通讯协议的原文和详解
  5. 地磁基本知识(一)地球磁场
  6. 泰勒法计算sin和cos值
  7. 数据预处理--离散变量处理
  8. 网站上的QQ在线客服“QQ在线状态”按钮变成灰色“未启用”状态?
  9. python utils模块怎么安装_安装python模块时报错如何解决
  10. python多进程实战——4k图片抓取