MySQL 快速构造一亿条记录的表
在上一次朋友问我如何快速构造一亿条记录的表后,我理出了实行的办法,见:http://blog.csdn.net/mchdba/article/details/52938114,但是因为录入一亿表需要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` ( |
存储过程内容:
|
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 快速构造一亿条记录的表的更多相关文章
- mysql快速导入5000万条数据过程记录(LOAD DATA INFILE方式)
mysql快速导入5000万条数据过程记录(LOAD DATA INFILE方式) 首先将要导入的数据文件top5000W.txt放入到数据库数据目录/var/local/mysql/data/${d ...
- 清理8组nodes中表的历史数据,平均每个node中的表有1.5亿条记录,需要根据date_created字段清理8000W数据记录,这个字段没有索引。
清理8组nodes中表的历史数据,平均每个node中的表有1.5亿条记录,需要根据date_created字段清理8000W数据记录,这个字段没有索引. 环境介绍 线上磁盘空间不足,truncate ...
- 【面经】面试官:如何以最高的效率从MySQL中随机查询一条记录?
写在前面 MySQL数据库在互联网行业使用的比较多,有些小伙伴可能会认为MySQL数据库比较小,存储不了很多的数据.其实,这些小伙伴是真的不了解MySQL.MySQL的小不是说使用MySQL存储的数据 ...
- MySQL使用INSERT插入多条记录
MySQL使用INSERT插入多条记录,应该如何操作呢?下面就为您详细介绍MySQL使用INSERT插入多条记录的实现方法,供您参考. 看到这个标题也许大家会问,这有什么好说的,调用多次INSERT语 ...
- AX 插入一条记录提示表记录已经存在,但是该记录实际上是不存在的。
做测试的时候遇到一个情况"AX 插入一条记录提示表记录已经存在,但是该记录实际上是不存在的." 检查到该表(TABLE_ABC)所有的key都是AllowDuplicate的, 继 ...
- mysql 造1亿条记录的单表--大数据表
读写文件 背景及木:现有数据1000w单表,为压力测试准备1亿条数据. 步骤: 1.将1000w条记录,除id外都导入到多个文件中: //DELIMITER DROP PROCEDURE if EXI ...
- 如何在十分钟内插入1亿条记录到Oracle数据库?
这里提供一种方法,使用 APPEND 提示,使得十分钟内插入上亿数据成为可能. -- Create table create table TMP_TEST_CHAS_LEE ( f01 VARCHAR ...
- python 往mysql数据库中插入多条记录。
最近想写mysql库,用到insert into语句,如何一次性将多条记录插入库表中呢. MySQLdb提供了两个执行语句的方法:一个是execute(),另一个是executemany() exec ...
- mongodb索引--1亿条记录的查询从55.7秒到毫秒级别<补充版>
从头开始,验证mongodb的索引的好处.(window7环境下) 下载mongodb服务器,并解压到d盘,并使用以下命令启动 mongod --dbpath D:\mongodb\data mong ...
随机推荐
- HDU 4463 Outlets(最小生成树给坐标)
Problem Description In China, foreign brand commodities are often much more expensive than abroad. T ...
- Non-technical Blog Recording on Day of Sep. 19th 2017 in Retrospection.
Unfortunately, I heard a resignation message verbally from ESU (her name is: Su Yi in Chinese, Su fr ...
- JavaScript条件语句-5--if语句的嵌套
JavaScript条件语句 学习目标 1.掌握length属性的应用 2.掌握if语句的嵌套 length 语法:string.length 功能:获取string字符串的长度 返回值:number ...
- requestAnimationFrame结束demo
- 移动APP漏洞趋势
个人总结,可能片面或不正确 样本来自WooYun网站,截止15年12月19号,一共75650个漏洞: 一.Top10安全漏洞中,sql注入占1/3:可见如果你是sql注入方面的测试专家,web安全1/ ...
- 12.2 关闭DLM 自动收集统计信息 (SCM0)ORA-00600之[ksliwat: bad wait time]
一.报错日志 db_alert ORA-: ??????, ??: [ksliwat: bad wait time], [], [], [], [], [], [], [], [], [], [], ...
- Django组件之分页器
分页器 简单的分页器实现 views.py from django.core.paginator import Paginator,EmptyPage,PageNotAnInteger from ap ...
- 【BZOJ1030】【JSOI2007】文本生成器
我现在连AC自动姬都不会,怎么办嘛QAQ 原题: JSOI交给队员ZYX一个任务,编制一个称之为“文本生成器”的电脑软件:该软件的使用者是一些低幼人群,他们现在使用的是GW文本生成器v6版.该软件可以 ...
- docker下搭建fastfds集群版
搭建过程参考 作者 https://me.csdn.net/feng_qi_1984 的课程视频 声明:集群版是在我之前写的单机版基础之上进行搭建的,我将安装了fastfds单机版的docker打包成 ...
- Map的嵌套使用
Map嵌套Map: 例: AAA: Javas班: 001 熊大 002 熊二 Hdoop班 001 小猪猪 002 小菲菲 ★使用增强for循环遍历Set数组: import java.util.H ...